发布于2019-08-08 11:54 阅读(809) 评论(0) 点赞(3) 收藏(3)
形参角度(一共四种,后两种)
动态参数(万能参数)*
# 定义一个函数时,*所有的位置参数聚合到一个元组中
def func(*args): # *args这里是一个元组
print(f"名门正派都有:{arg}")
func("少林","武当","峨眉") # 名门正派都有:("少林","武当","峨眉")
---------------------------------
# 定义一个函数时,**所有的关键字参数聚合到一个字典中
def func(**kwargs): # **kwargs这里是一个字典
print(kwargs)
func(name="陈",age=25,hobby="跑步") # {name:"陈",age:25,hobby:"跑步"}
---------------------------------
# *和**可同时使用
def func(*args,**kwargs):
print(args) # ('少林', '武当', '峨眉')
print(kwargs) # {'name': '陈', 'age': 25, 'hobby': '跑步'}
func("少林","武当","峨眉",name="陈",age=25,hobby="跑步")
动态参数*特殊用法
# 函数内*用法
def func(*args): # *args这里是一个元组
print(args)
lis1=["少林","武当","峨眉"]
lis2=["极乐谷","魔教"]
func(*lis1,*lis2) # ("少林","武当","峨眉","极乐谷","魔教")
# 当函数的执行时,*iterable代表打散
---------------------------------
def func(**kwargs): # **kwargs这里是一个字典
print(kwargs)
dic1={name:"陈",age:25,hobby:"跑步"}
dic2={name:"王",age:27,hobby:"游戏"}
func(**dic1,**dic2) # {name:"陈",age:25,hobby:"跑步",name:"王",age:27,hobby:"游戏"}
# **dict代表打散,此方式只能打散字典
#函数外*用法
a,b,*c=[1,2,3,4,5,6,7]
print(a,b,c) # 1,2,[3,4,5,6,7]
# 在函数外*用于处理剩余元素,以列表的形式将剩余元素整合在一起
形参角度的最终顺序
def func(a,b,*args,sex="man",**kwargs):
仅限关键字参数(了解即可)
# 在形参中以位置参数形式存在关键字参数与**kwargs之间,但是实参必须使用关键词方式传参.
def func(a,b,*args,sex="man",c,**kwargs):
print(a,b,args,sex,c,kwargs)
func(1,2,3,4,5,c=[6,7],name="陈",age=25)
# 执行结果 : 1 2 (3, 4, 5) man [6, 7] {'name': '陈', 'age': 25}
内置函数 : globals,locals
globals() # 以字典的形式返回全局作用域所有的变量对应关系
locals() # 以字典的形式返回当前作用域的变量的对应关系
# 在全局作用域下打印,则他们获取的都是全局作用域的所有的内容。
a = 2
b = 3
print(globals())
print(locals())
'''
{'__name__': '__main__', '__doc__': None, '__package__': None,
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001806E50C0B8>,
'__spec__': None, '__annotations__': {},
'__builtins__': <module 'builtins' (built-in)>,
'__file__': 'D:/lnh.python/py project/teaching_show/day09~day15/function.py',
'__cached__': None, 'a': 2, 'b': 3}
'''
---------------------------------
# 在局部作用域中打印。
a = 2
b = 3
def foo():
c = 3
print(globals()) # 和上面一样,还是全局作用域的内容
print(locals()) # {'c': 3}
foo()
# 实例1:
def func1():
print('in func1')
print(3)
def func2():
print('in func2')
print(4)
func1() # in func1 3
print(1) # 1
func2() # in func2 4
print(2) # 2
---------------------------------
# 例2:
def func1():
print('in func1')
print(3)
def func2():
print('in func2')
func1()
print(4)
print(1) # 1
func2() # in func2 in func1 3 4
print(2) # 2
---------------------------------
# 例3:
def fun2():
print(2)
def fun3():
print(6)
print(4)
fun3()
print(8)
print(3) # 3
fun2() # 2 4 6 8
print(5) # 5
global关键字有两个作用
声明一个全局变量。
在局部作用域想要对全局作用域的全局变量进行修改时,需要用到 global(限于字符串,数字)。
# global第一个功能:在局部作用域中可以更改全局作用域的变量
count = 1
def search():
global count
count = 2
search()
print(count) # 2
---------------------------------
# global第二个功能:利用global在局部作用域也可以声明一个全局变量。
def func():
global a
a = 3
func()
print(a) # 3
nonlocal是python3中新加的功能
与global用法差不多,就是在局部作用域如果想对父级作用域的变量进行改变时,需要用到nonlocal.
不能更改全局变量。
在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。
def add_b():
b = 42
def do_global():
b = 10
print(b)
def dd_nonlocal():
nonlocal b
b = b + 20
print(b)
dd_nonlocal()
print(b)
do_global()
print(b)
add_b()
作者:ryuer8423
链接:https://www.pythonheidong.com/blog/article/13917/b9952b8ad3d37c5f1dd5/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!