Python之第十天的努力--万能参数,名称空间,作用域与高阶函数与glbals(),locals()
01 内容回顾
-
函数是以功能为导向,减少重复代码,提高代码的可读性。
def func(): 函数体 -
函数的调用:func()
-
函数的返回值return
-
终止函数
def func(): count = 1 while 1: count += 1 print(count) return func() # 2 -
return 单个值
-
return 多个值:(1,2,3,'hhh')
-
-
函数的参数:
- 实参角度:位置参数,关键字参数,混合参数。
- 形参角度:位置参数,默认参数。
02 练习
# 3.写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
# def func(x):
# return True if x > 5 else False
# def func(x):
# return len(x) > 5
# print(func('154544'))
# 7.写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
# dic = {"k1": "v1v1", "k2": [11,22,33,44]}
# PS:字典中的value只能是字符串或列表
# def func(dic):
# new_dic = {}
# for key,value in dic.items():
# new_dic[key] = value[:2]
# return new_dic
# print(func(dic))
03 函数的参数2
-
万能参数
-
*args:
# def eat(a,b,c,d): # print('我请你吃:%s,%s,%s,%s'%(a,b,c,d)) # # eat('蒸羊羔','蒸熊掌','烧花鸭','烧子鹅') # def eat(a,b,c,d,e,f): # print('我请你吃:%s,%s,%s,%s,%s,%s'%(a,b,c,d,e,f)) # # eat('蒸羊羔','蒸熊掌','烧花鸭','烧子鹅','腊肉','酱鸡') # 急需要一种形参,可以接受所有的实参。# 万能参数 # 万能参数:*args, 约定俗称:args # * 函数定义时,*代表:聚合 将所有的位置参数聚合成一个元组,赋值给args # def eat(*args): # print('我请你吃:%s,%s,%s,%s,%s,%s'% args) # # eat('蒸羊羔','蒸熊掌','烧花鸭','烧子鹅','腊肉','酱鸡') # 写一个函数:计算你传入函数的所有的数字的和。 # def func(*args): # # print(args) # count = 0 # for i in args: # count += i # return count # # print(func(1,2,3,4,5,6,7,8,9)) -
**kwargs:
# **kwargs # 函数定义时: ** 将所有的关键字参数聚合到一个字典中,将这个字典赋值给kwargs # def func(**kwargs): # print(kwargs) # func(name='zs',age='18',sex='男') -
# 万能参数:*args **kwargs # def func(*args,**kwargs): # print(args) # print(kwargs) # func() # * ** 在函数调用时,* 代表打散 # def func(*args,**kwargs): # print(args) # print(kwargs) # func([1,2,3],[11,22]) # ([1, 2, 3], [11, 22]) # func(*[1,2,3],*[11,22]) # (1, 2, 3, 11, 22) # func({'name':'zs'},{'age':18}) # ({'name': 'zs'}, {'age': 18}) # func(**{'name':'zs'},**{'age':18}) # () {'name': 'zs', 'age': 18}
-
-
形参角度参数的顺序:
# 形参角度的参数顺序 # def func(a,b,*args,name='hhh',**kwargs): # print(a,b) # print(name) # print(args) # print(kwargs) # func(1,2,3,4,5,name='kkk',sex='男',age='18') # 形参角度第四个参数:仅限关键字参数 # 形参角度的最终顺序:位置参数,*args,默认参数,仅限关键字参数,**kwargs
03 名称空间
-
全局名称空间
-
局部名称空间(临时名称空间):
-
内置名称空间:
# 内置名称空间:Python源码给你提供的一些内置的函数,print input -
# Python分为三个空间: # 内置名称空间 (builtins.py) # 全局名称空间 (当前py文件) # 局部名称空间 (函数,函数内部执行时才开辟) # 加载顺序: # 内置名称空间 全局名称空间 局部名称空间(函数执行时) # 取值顺序(就近原则) 单向不可逆 # name = 'zs' # def func(): # name = 'kk' # print(name) # func() # kk # print(name) # zs
05 作用域与高阶函数与glbals(),locals()
-
作用域
# 作用域: # 两个作用域: # 全局作用域 : 内置名称空间 全局名称空间 # 局部作用域 : 局部名称空间 # 局部作用域可以引用全局作用域的变量 # data = '周三' # def func(): # a = 666 # print(data) # func() # print(a) # 报错 # 局部作用域不能改变全局变量 count = 1 def func(): count = 100 # 不叫修改 在局部创建了一个新的 # count += 1 # local variable 'count' referenced before assignment print(count) func() # 局部作用域不能改变全局作用域的变量,当python解释器读取到局部作用域时,发现了对一个变量进行的修改操作 # 解释器会认为在局部已经定义过这个局部变量了,他就从局部找这个局部变量,报错了。 -
高阶函数
# 高阶函数 def func(): count = 1 def inner(): # count += 1 # 报错 print(count) inner() func()-
三个例题
# 例1: # def func1(): # print('in func1') # print(3) # # def func2(): # print('in func2') # print(4) # # func1() # print(1) # func2() # print(2) # in func1 # 3 # 1 # in func2 # 4 # 2 # 例2: # def func1(): # print('in func1') # print(3) # # def func2(): # print('in func2') # func1() # print(4) # # print(1) # func2() # print(2) # 1 # in func2 # in func1 # 3 # 4 # 2 # 例3: def func2(): print(2) def func3(): print(6) print(4) func3() print(8) print(3) func2() print(5) # 3 # 2 # 4 # 6 # 8 # 5
-
-
glbals(),locals()
a = 1 b = 2 def func(): name = 'hhh' age = 18 print(globals()) # 返回字典:字典里的键值对:全局作用域的所有内容。 print(locals()) # 返回字典:字典里的键值对:当前作用域的所有内容。

浙公网安备 33010602011771号