
当我们不想对参数的常用值进行高频传递的时候,我们可以使用默认参数,这样的好处就是可以再调用函数的时候不传递这个参数,但是函数会使用这个参数的默认参数。
比如大多数人都是好人:
def PersonInfo(name,age,is_good=True): # 传入默认参数is_good=False
if is_good:
tag = 'good people'
else:
tag = 'bad people'
print('welcome ',name,', you are',age,' years old...','[',tag,']')
# 调用,不传is_good参数
PersonInfo(age=18,name='phyger')
# 输出
C:\Users\Administrator\Desktop\document>D:/Python37/python.exe c:/Users/Administrator/Desktop/document/test.py
welcome phyger , you are 18 years old... [ good people ]
# 传入is_good参数
PersonInfo(age=18,name='phyger',is_good=False)
# 输出
C:\Users\Administrator\Desktop\document>D:/Python37/python.exe c:/Users/Administrator/Desktop/document/test.py
welcome phyger , you are 18 years old... [ bad people ]
当我们不确定参数的数量和关键字,或者参数太多不想一一列举时,我们可以用到不定位置参数:*args
例:第一个参数是班级,后面的每个人名都是一个参数,我们想要遍历人名。
def StuInfo(clas_num,*name): # 不定位置参数*name
for stu in name:
print(clas_num,':',stu)
# 调用,2位班级数字,其余的参数均被*name接收
StuInfo(2,"phyger","shanxi","it")
# 输出
C:\Users\Administrator\Desktop\document>D:/Python37/python.exe c:/Users/Administrator/Desktop/document/test.py
2 : phyger
2 : shanxi
2 : it
你会发现上面的不定参数是按照位置的顺序排的,当我们变换了顺序后会怎么样呢?
def StuInfo(clas_num,*name):
print(clas_num,':','job:',name[0],'home:',name[1],'work:',name[2])
# 调用
StuInfo(2,"phyger","shanxi","it")
# 输出
C:\Users\Administrator\Desktop\document>D:/Python37/python.exe c:/Users/Administrator/Desktop/document/test.py
2 : job: phyger home: shanxi work: it
# 变换顺序调用
StuInfo(2,"phyger","it","shanxi")
# 输出
C:\Users\Administrator\Desktop\document>D:/Python37/python.exe c:/Users/Administrator/Desktop/document/test.py
2 : job: phyger home: it work: shanxi
我们发现变换了不定参数的位置后,参数也会因为位置而发生错乱,怎么解决这个问题呢?请继续往下看。
不定关键字参数:**kwargs
def StuInfo(clas_num,**name): # 不定关键字参数 **name
print(clas_num,':','job:',name['nam'],'home:',name['home'],'work:',name['work'])
# 调用使用k=格式
StuInfo(2,nam="phyger",work="it",home="shanxi")
# 输出
C:\Users\Administrator\Desktop\document>D:/Python37/python.exe c:/Users/Administrator/Desktop/document/test.py
2 : job: phyger home: shanxi work: it
你会发现,问题已经解决。
总结一下:
前面我们都是在函数中对计算的结果进行打印,但是如果我们想要将函数中计算的值保存起来,怎么办呢?这个时候就需要用到函数的返回值。
返回值使用return语句:
def calc_sum(*num):
sum = 0 # 定义sum
for i in num:
sum = sum +int(i) # 计算sum
return sum # 返回sum
res = calc_sum(1,2,3,4) # 定义res接收sum
print(res) # 打印sum
# 输出
C:\Users\Administrator\Desktop\document>D:/Python37/python.exe c:/Users/Administrator/Desktop/document/test.py
10
函数内部的变量仅供函数内部使用,为局部变量
函数外部的变量可供本项目的所有对象使用,为全局变量
year=2020
def say_hi():
name = 'phyger'
print('hello',name)
say_hi()
print(year)
print(name)
# 输出
C:\Users\Administrator\Desktop\document>D:/Python37/python.exe c:/Users/Administrator/Desktop/document/test.py
hello phyger
2020
Traceback (most recent call last):
File "c:/Users/Administrator/Desktop/document/test.py", line 45, in <module>
print(name)
NameError: name 'name' is not defined
Python有一个很棒的匿名函数lambda
表达式:
lambda arg1 arg2 arg*:arg1+arg2+...+arg*
例:计算两数之和
# 普通写法
def sum2(a,b):
print(a+b)
# 调用
sum2(1,2)
# lambda写法
sum2_new = lambda x,y: x+y
res = sum2_new(1,2)
print(res)
# 输出
C:\Users\Administrator\Desktop\document>D:/Python37/python.exe c:/Users/Administrator/Desktop/document/test.py
3
3
你会发现lambda很简洁,一行代码就实现了一个函数,但是传统写法更易理解,如果使用lambda写复杂的函数将会特别长,所以不推荐在工作中使用lambda。
转载请注明:XAMPP中文组官网 » Python入门实践操作13-函数变量作用域