python函数
2020-12-13 06:02
标签:margin 结束 efi for 内部函数 一个 type 复杂 嵌套 命名关键字参数: # 在函数定义阶段,写在 * 与 ** 之间的参数 下面的z 和 m 都是命名关键字参数 注意: # 在给命名关键字参数传值的时候 只能用关键字为其传值 , # 在定义阶段 给你感觉好像是z是默认值参数 放在了m这个位置参数的前面了 应该报错,但其实 z 和 m 都不是默认值参数和位置参数, 他们是命名关键字参数 函数是第一对象: # 函数名指向的值可以被当做参数传递 函数名可以像变量一样被传递 函数名可以被当做参数传递给其他函数 函数名可以被当做函数的返回值 函数名可以被当做容器类型的参数 题目: # 循环打印项目功能提示信息 供用户选择 用户选择谁就执行谁 函数的嵌套调用: # 在函数内部调用其他函数 函数的嵌套调用可以 # 将复杂的逻辑简单化 小练习: # 写一个函数可以求四个数中的最大值 实现在外部调用 outer函数的内部函数 inner 小案例: # 写一个函数,该函用户可以通过传参的不同 控制函数指向不同的功能 名称空间: # 存放的是变量名与变量值的内存地址绑定关系的地方 ,后文可能称之为命名空间。 访问变量的值: # 要想访问一个变量的值,必须先去名称空间拿到对应的名字,才能访问变量的值 命名空间分为: # 内置名称空间、全局名称空间、局部名称空间 三大类 内置名称空间: # python 解释器提前已经定义好了的名字(已经存放到了内置名称空间中了) 全局命名空间: # 文件级别的代码 局部命名空间: # (目前所学)函数体内创建的名字都属于局部名称空间(函数名是属于全局名称空间的) 至于为什么上面的 print(username) 为什么会报错,学完下面的知识你就知道啦。 python函数 标签:margin 结束 efi for 内部函数 一个 type 复杂 嵌套 原文地址:https://www.cnblogs.com/suwanbin/p/11164596.html命名关键字参数
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}
函数对象
函数对象的特性
# 变量可以被传递
name = ‘jason‘
x = name
print(x)
# jason
print(id(name), id(x))
# 3085464224688 3085464224688
# 尝试函数像变量一样被传递
def func():
print(‘from func‘)
print(func)
#
def func():
print("from func")
def index(args):
print(args)
args() # 函数主要一定义(先定义)就可以在任意地方调用
print("from index")
index(func)
#
def index():
print(‘index‘)
def func():
print(‘func‘)
return index
res = func() # 将返回的函数名index 赋值给变量res
# func
print(res)
#
def func():
print(‘func‘)
l = [1, 2, func, func()] # 定义的时候默认执行了func(),所以下面先打印了 func
# func # func函数没有返回值,所以默认是None
print(l)
# [1, 2,
函数对象小练习
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
# 想在外部调用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
名称空间
命名空间的分类
内置命名空间
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()
命名空间的生命周期
‘‘‘
名称空间的生命周期
内置名称空间:(最长)只要 python解释器启动,立马创建 关闭 python解释器时自动销毁
全局名称空间: 只要右键运行 py文件就会自动创建 py文件程序运行结束自动销毁
局部名称空间:(动态创建动态销毁)函数被调用的时候自动创建 函数执行结束后立即销毁
‘‘‘