函数是第一类对象
1、函数名是可以被引用的:
name = "zc"
dsb = name
所以name是先定义的,zc是先赋值给name的,然后再定义dsb,然后再引用第一个定义的name.
def index():
print('from index')
a = index
a()
第二种方式:读法是先定义一个index,然后是a = index,调用函数名,可以直接调用,方便简单。
2、函数名可以当做参数传递
def foo(x,y,func):
print(x,y)
func()
def bar():
print("from bar")
foo(1,2,bar)
读法是这样的:
第一步:定义def foo(x,y,func)
第二步:定义def bar()
第三步:调用foo(1,2,bar),bar = func 1,2就是位置参数
第四步:print(1,2) func(), 而func()其实就是bar()
第五步:就是执行bar这个函数。
运行结果就是:
1 2
from bar
3 函数名可以当做返回值使用
传参的时候没有特殊需求,一定不要加括号,加括号当场执行了
def index()
print("from index")
def func(a)
return a
a = func(index)
print(a)
a()
读法:
第一步:定义一个函数index()
第二步:再定义一个函数func(a)
第三步:赋值 a = fun(index), index 赋值给 a,就是a = fun(a)
第四步:执行print(index(a)) 打印 index(a)的地址
第五步:a()其实就是调用index(),执行这个函数,就是print(“from index”)
运行结果就是:
第一行是index(a)的地址:<function index at 0x0000018CED152318>
第二行是执行a(),也就是执行index(),这是什么意思呢?也就是看执行第一行代码了,
func(index) 这是一个调用的函数,返回的是一个值,index赋值给a, a=index,然后往下执行,值就是index,return(a),就是返回a,然后返回的值就是index。然后就是执行index()这条语句了。
def func(): #定义一个函数
print("from func") #函数体
l1 = [1,"2",func,func()] #做一个l1的容器类型,第三个元素是func,第四个元素执行func()函数。所以他是先执行func()函数语句,怎样执行呢?直接调用func()语句,打印print("from func")
f = l1[2] #然后执行第二点,f= func 这个值,是函数名
print(f)
读法:
第一步:先定义一个函数
第二步:立即执行调用func函数里面的内容,print("from func"),打印出来就是from func
第三步:就是列表中第二个元素赋值给f,然后print(f),就是print f 对应的地址。列表元素不是直接存在列表范围内的,而是以地址的形式保存在列表中。
这边还有一个函数代码如下:
def register():
print("register")
def login():
print("login")
def shopping():
print("shopping")
def pay():
print("pay")
func_dic = {"1":register,"2":login,"3":shopping,"4":pay}
def main():
while True:
print("""
1、注册
2、登陆
3、购物
4、付款
5、退出
""")
choice = input("请输入对应的编号:").strip()
if choice == "5":
break
if choice not in func_dic:
continue
else:
func_dic[choice]()
main()