最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Python入门实践操作13-函数变量作用域

XAMPP案例 admin 519浏览 0评论
zzzzzx01
函数的默认参数

当我们不想对参数的常用值进行高频传递的时候,我们可以使用默认参数,这样的好处就是可以再调用函数的时候不传递这个参数,但是函数会使用这个参数的默认参数。

比如大多数人都是好人:

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

你会发现,问题已经解决。

 

总结一下:

*args表示任何多个无名参数,它本质是一个tuple; **kwargs表示关键字参数,它本质上是一个dict;
函数的返回值

前面我们都是在函数中对计算的结果进行打印,但是如果我们想要将函数中计算的值保存起来,怎么办呢?这个时候就需要用到函数的返回值。

返回值使用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只是一个表达式,函数体比def简单很多。lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

 

 

表达式:

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-函数变量作用域

您必须 登录 才能发表评论!