目录
实例如下:
# 返回值
# 没有return关键字,返回None
def max(a,b):
if a>b:
print(a)
else:
print(b)
res = max(1,2)
print(res)
# 结果
2
None
实例如下:
# 返回值
# 有return关键字,return后面没有跟返回值,返回None
def max(a,b):
if a>b:
print(a)
else:
print(b)
return
res = max(1,2)
print(res)
# 结果
2
None
实例如下:
# 返回值
# 函数体代码有关键字return,return后面跟了返回值,那么就会返回return后的值
# 跟了单个值
def max(a, b):
if a > b:
print(a)
else:
print(b)
return '单个值'
res = max(1, 2)
print(res)
# 结果
# 2
# 单个值
# 跟多个值
def max(a, b):
if a > b:
print(a)
else:
print(b)
#以元组的形式返回
return '跟了','多个值'
res = max(1, 2)
print(res)
实例如下:
注意:形参的表现形式只有一种就是以变量名的形式出现, 而实参的表现形式可以有很多种(数值,表达式·····)
定义:按照从左往右顺序依次填入的参数
注意:位置形参与位置实参的位置一一对应,传参的时候不能多传入或者少传入
实例如下:
实例如下:
def max(a,b):
if a>b:
print(a)
else:
print(b)
# 调用
# 默认位置参数传值
max(4,2)
# 关键字实参
max(4,b=2)
max(b = 2,a = 4)
# 结果
4
4
4
# 位置参数必须在关键字参数前
# max(a=4,2) # 关键字实参在位置实参前报错
# SyntaxError: positional argument follows keyword argument
实例如下:
# 默认参数
# 定义形参,name,age为位置形参,sex为默认参数
def login(name,age,sex ='male'):
print(name,age,sex)
# 调用函数
# 调用函数不传入默认参数的时候
login('HammerZe',18)
# 结果
# HammerZe 18 male
# 调用函数传入默认参数的时候
login('HammerZe',18,'famale')
login('HammerZe',18,sex='shemale')
# 结果
# HammerZe 18 famale
# HammerZe 18 shemale
函数无论传入多少位置参数都可以正常运行
① 第一种可变长形参:
实例如下:
def info(name,age,*args):
print(name,age,args)
info('HammerZe',18,'male','199****1234')
# 结果
HammerZe 18 ('male', '199****1234')
只能用于位置参数,关键字参数不能用*args来接收
② 第二种可变长形参:
实例如下:
def info(name,age,**kwarg):
print(name,age,kwarg)
info('HammerZe',18,sex = 'male',number ='199****1234')
# 结果
HammerZe 18 {'sex': 'male', 'number': '199****1234'}
③ 综合使用
实例如下:
def info(name,age,*args,**kwarg):
print(name,age,args,kwarg)
info('HammerZe',18,
'male',number ='199****1234')
# 结果
HammerZe 18 ('male',) {'number': '199****1234'}
注意!可变长形参定义格式* 和 * * 后面的变量名其实可以随便定义,但是在python中推荐使用 * args和 ** kwargs!!
① 第一种可变长实参:
实例如下:
def info(*args):
print(args)
userinfo = ['HammerZe',18,'male','199****1234']
userinfo1 = ('HammerZe',18,'male','199****1234')
# 使用列表和元组都可以,输出的结果都为元组
info(*userinfo)
info(*userinfo1)
# 结果
('HammerZe', 18, 'male', '199****1234')
('HammerZe', 18, 'male', '199****1234')
① 第二种可变长实参:
实例如下:
def info(**kwargs):
print(kwargs)
userinfo = {'name':'HammerZe','age':18,'sex':'male','numbers':'199****1234'}
# 使用字典被当作关键字参数传入,输出结果为字典
info(**userinfo)
# 结果
{'name': 'HammerZe', 'age': 18, 'sex': 'male', 'numbers': '199****1234'}
命名关键字参数
实例如下:
# 定义格式
def register(name,age,*,sex,number):
print(name,age,sex,number)
return name,age,sex,number
# 位置形参传参完成后的参数必须使用关键字实参传参
register('HammerZe',18,sex='male',number='199****1234')
# 不使用关键字参数传参报错
register('HammerZe',18,'male','199****1234')
#TypeError: register() takes 2 positional arguments but 4 were given
print()/len()/range()·····
全局名称空间:
定义 : 在py文件中顶格写的代码运行之后都会存入全局名称空间
实例如下:
name = 'HammerZe'
def fun(): # fun为全局名称
pass
if True:
a = 123 # a为全局
for i in range(10):
print(i) # i为全局
while True:
a = 1 # a为全局
局部名称空间:
定义 : 函数体代码运行之后产生的都是局部名称空间
实例如下:
x = 1 # 全局
def fun(x):
'''代码体'''
x=123
# 局部
print(x)
fun(x)
# 全局
print(x)
# 结果
123 # 函数体的结果为局部x返回123
1 # 全局x 返回1
实例如下:
# 用len举例,来验证查找顺序
len = '全局名称'
def findname():
len = '局部名称'
print(len)
# 调用函数输出局部名称
findname()
# 全局名称
print(len)
# 结果
# 局部名称
# 全局名称
查找内置:
实例如下:
# 用len举例,来验证查找顺序
# len = '全局名称'
# def findname():
# len = '局部名称'
# print(len)
#
# 调用函数输出局部名称
# findname()
# 全局名称
print(len)
# 全部注释掉,最后查找的就是内置
#结果
<built-in function len>
局部名称空间特例:
实例如下:
def f1(): # f1为全局
# 在f1下查找输出222
x = 222
def f2():
# 在f2下查找输出333
x = 333
def f3():
# 在f3下查找输出444
x = 444
def f4():
# 在f4下查找输出555
x = 555
print(x)
# x = 555 # 特例,局部变量在赋值前被引用是错的,先定义后查找
f4()
f3()
f2()
# 通过调用f1()来查找
f1()
# 结果
555