标签:margin 结束 efi for 内部函数 一个 type 复杂 嵌套
命名关键字参数: # 在函数定义阶段,写在 * 与 ** 之间的参数
下面的z 和 m 都是命名关键字参数
def func(x, y=1, *args, z=3, m, **kwargs): print(x, y) print(args) print(z, m) print(kwargs) func(1, 2, 3, 4, [5, 6, 7], m=1, z=3, n=1, q=1, p=2) # 关键字传参 m = 2 # 要想给m传值, 必须用关键字传值 m = 2,如果直接用位置参数,显然会被 *args接收(截取) # 调用 func() 返回值如下: # 1 2 # (3, 4, [5, 6, 7]) # 3 1 # {‘n‘: 1, ‘q‘: 1, ‘p‘: 2}
注意: # 在给命名关键字参数传值的时候 只能用关键字为其传值 , # 在定义阶段 给你感觉好像是z是默认值参数 放在了m这个位置参数的前面了 应该报错,但其实 z 和 m 都不是默认值参数和位置参数, 他们是命名关键字参数
函数是第一对象: # 函数名指向的值可以被当做参数传递
函数名可以像变量一样被传递
# 变量可以被传递 name = ‘jason‘ x = name print(x) # jason print(id(name), id(x)) # 3085464224688 3085464224688 # 尝试函数像变量一样被传递 def func(): print(‘from func‘) print(func) # <function func at 0x0000016E5E062E18> f = func # 其实指向的也是函数func 指向的函数体代码的内存地址 print(f) # <function func at 0x000001B4D0D92E18> f() # from func print(id(func), id(f)) # 3085463137816 3085463137816
函数名可以被当做参数传递给其他函数
def func(): print("from func") def index(args): print(args) args() # 函数主要一定义(先定义)就可以在任意地方调用 print("from index") index(func) # <function func at 0x000001B7429A2E18> # from func # from index
函数名可以被当做函数的返回值
def index(): print(‘index‘) def func(): print(‘func‘) return index res = func() # 将返回的函数名index 赋值给变量res # func print(res) # <function index at 0x000001EF64362E18> res() # index
函数名可以被当做容器类型的参数
def func(): print(‘func‘) l = [1, 2, func, func()] # 定义的时候默认执行了func(),所以下面先打印了 func # func # func函数没有返回值,所以默认是None print(l) # [1, 2, <function func at 0x0000013931C92E18>, None]
题目: # 循环打印项目功能提示信息 供用户选择 用户选择谁就执行谁
def register(): username = input(‘username>>>:‘).strip() pwd = input(‘password>>>:‘).strip() print(username,pwd) print(‘register ...‘) def login(): print(‘login ...‘) def transfer(): print(‘transfer ...‘) def shopping(): print(‘shopping...‘) def pay(): print(‘pay ...‘) msg = """ 1 注册 2 登陆 3 转账 4 购物 5 支付 """ func_dict = { ‘1‘:register, ‘2‘:login, ‘3‘:transfer, ‘4‘:shopping, ‘5‘:pay, } while True: print(msg) choice = input(‘请现在你想要执行的功能>>>:‘).strip() if choice in func_dict: func_dict.get(choice)() # 函数名() # if choice == ‘1‘: # register() # elif choice == ‘2‘: # login() # elif choice == ‘3‘: # transfer() # elif choice == ‘4‘: # shopping() # elif choice == ‘5‘: # pay() else: print(‘你输入的功能暂时没有‘)
函数的嵌套调用: # 在函数内部调用其他函数
def index(): print(‘index‘) def func(): index() # 在定义 func 函数的时候不会直接调用 index 的方法 --> 函数定义的时候不执行代码 print(‘func‘) func() # index # 通过 func()函数内部调用了index() 函数,打印出了 index # func
函数的嵌套调用可以 # 将复杂的逻辑简单化
小练习: # 写一个函数可以求四个数中的最大值
def my_max(x, y): if x > y: return x return y def my_max4(a, b, c, d): res = my_max(a, b) res = my_max(res, c) res = my_max(res, d) return res print(my_max4(1, 5, 7, 1)) # 7
def outer(): x = 1 print("outer") def inner(): print("inner") inner() # inner() # 会报错,在外部无法访问内部内容 outer() # outer # inner
实现在外部调用 outer函数的内部函数 inner
# 想在外部调用inner 可通过把内部的函数名当做外部函数的返回值来返回给外部 def outer(): x = 1 print("outer") def inner(): print("inner") return inner # 把 inner 函数当做函数的返回值返回给 outer函数的调用者 res = outer() # outer res() # 变相调用inner # inner
小案例: # 写一个函数,该函用户可以通过传参的不同 控制函数指向不同的功能
def all_func(type): def register(): print(‘register‘) def login(): print(‘login‘) def shopping(): print(‘shopping‘) if type == 1: register() if type == 2: login() if type == 3: shopping() all_func(1) all_func(2) all_func(3) # register # login # shopping
名称空间: # 存放的是变量名与变量值的内存地址绑定关系的地方 ,后文可能称之为命名空间。
访问变量的值: # 要想访问一个变量的值,必须先去名称空间拿到对应的名字,才能访问变量的值
命名空间分为: # 内置名称空间、全局名称空间、局部名称空间 三大类
内置名称空间: # python 解释器提前已经定义好了的名字(已经存放到了内置名称空间中了)
print("hello world") max(1, 44, 62, 15) len(‘26515f1asfafqw‘) sum([1, 2, 3, 4, 5]) # 像上面的print max len sum 并没有定义就可以值使用,它们就是python解释器提前定义好了的函数,属于内置命名空间的
全局命名空间: # 文件级别的代码
x = 1 if x == 1: y = 2 print(y) # 2 for i in [1, 2]: print(i) print(i) # 1 # 2 # 2 # 上面的 x y z 都在全局名称空间,不要以为缩进的就是局部的(if、 for、 while 无论嵌套,多少层,他们内部所创建的名字都是全局名称空间的)
局部命名空间: # (目前所学)函数体内创建的名字都属于局部名称空间(函数名是属于全局名称空间的)
def func(): username = ‘jason‘ # print(username) # 会报错 NameError: name ‘username‘ is not defined func()
至于为什么上面的 print(username) 为什么会报错,学完下面的知识你就知道啦。
‘‘‘ 名称空间的生命周期 内置名称空间:(最长)只要 python解释器启动,立马创建 关闭 python解释器时自动销毁 全局名称空间: 只要右键运行 py文件就会自动创建 py文件程序运行结束自动销毁 局部名称空间:(动态创建动态销毁)函数被调用的时候自动创建 函数执行结束后立即销毁 ‘‘‘
标签:margin 结束 efi for 内部函数 一个 type 复杂 嵌套
原文地址:https://www.cnblogs.com/suwanbin/p/11164596.html