#函数调用的三种形式
#
# 1 语句形式:foo()
# def foo() :
# print('a')
# return 1
# foo()
# 2 表达式形式:3*len('hello')
# def foo():
# print('a')
# return 1
# print(len(foo()))
# 3 当中另外一个函数的参数:range(len('hello'))
# def foo1(a):
# # print(a)
# return a
#
# def foo2():
# # print('a')
# return '123'
# print(foo1(foo2()))
#-----------------------------------------------------
# 形参实参
# 1.位置参数
# 实参和形参位置上一一对应 不可多值 或 少值
# def func1(x,y):
# print(x,y)
# func1(1,2)
# 2. 关键词参数
# 形参实参指定变量名,以关键词辨认位置
# 注:1. 实参传入时可结合位置参数 和 关键词参数
# 但格式只能为(位置参数,关键词参数),二者位置不可对调
# 2. 实参不可对同一个值进行重复传值
# def func1(name,age):
# print(name,age)
# func1('lin',age = 18)
# open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True):
# open('a.txt','w',encoding='utf-8')
# 3.默认形参
# 设置默认值的关键词参数,传值时可省略传入过程,以默认值替代
# def func1(name,age,sex = 'male'):
# print(name,age,sex)
# func1('lin',age = 18)
# func1('lin',18,sex='female')
#4、可变长参数:
# 可变长指的是实参值的个数不固定,而实参有按位置和按关键字两种形式定义,
# 针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,
# 分别是*args,**kwargs
#
# def foo(x,y,*args):
# print(x,y)
# print(args)
# foo(1,2,3,4,5)
# 在实参中带*:使其打散成位置实参进行赋值
# def foo(x,y,*args):
# print(x,y)
# print(args)
# foo(1,2,*[3,4,5]) #== foo(1,2,3,4,5,6)
# def foo(x,y,z):
# print(x,y,z)
# foo(*[1,2,3])#== foo(1,2,3)
#
# def foo(x,y,**kwargs):
# print(x,y)
# print(kwargs)
# foo(1,y=2,a=1,b=2,c=3)
# 在实参中带**:使其打散成关键词实参进行赋值
# def foo(x,y,**kwargs):
# print(x,y)
# print(kwargs)
# foo(1,y=2,**{'a':1,'b':2,'c':3})
#
#
# def foo(x,y,**z):
# print(x,y,z)
# foo(**{'z':1,'x':2,'y':3,'a':4})
#
#
# 将传给一个函数的参数 原封不动的传给另一个函数
# 注:需要遵循foo 函数的规则
# def foo(x,y):
# print(x,y)
# def wrapper(*args,**kwargs):
# print('====>')
# foo(*args,**kwargs)
# # wrapper(1,4)
# wrapper(1,y=777)
#5、命名关键字参数:*后定义的参数,必须被传值(有默认值的除外),
# 且必须按照关键字实参的形式传递可以保证,传入的参数中一定包含某些关键字
# def foo(x,y,*args,a=1,b,**kwargs):
# print(x,y)
# print(args)
# print(a)
# print(b)
# print(kwargs)
#
# foo(1,2,3,4,5,b=3,c=4,d=5)
# 结果:
# 1
# 2
# (3, 4, 5)
# 1
# 3
# {'c': 4, 'd': 5}
# --------------------------
# 函数当做另一个函数返回值返回
# def func2(a):
# pass
#
# def func1(a):
# print(a)
# return a
# print(func1(func2(3)))
# ----------------------------
# 购物车功能优化选择
# def login():
# print('login')
#
# def register():
# print('register')
#
# def shopping():
# print('shopping')
#
# def pay():
# print('pay')
#
#
# def transfer():
# print('transfer')
#
# func_dic={
# '1':login,
# '2':register,
# '3':shopping,
# '4':pay,
# '5':transfer
# }
# # print(func_dic)
#
# msg="""
# 0 退出
# 1 登陆
# 2 注册
# 3 购物
# 4 支付
# 5 转账
# """
#
# while True:
# print(msg)
# choice=input('请输入您的操作: ').strip()
# if choice == '0':break
# if choice in func_dic:
# func_dic[choice]()
# else:
# print('输入错误指令,请重新输入')
# ------------------------------------
# 函数嵌套定:1.函数嵌套使用,2.函数嵌套定义
#一:函数的嵌套调用:在调用一个函数过程中,其内部代码又调用了其他函数
# def bar():
# print('from bar')
#
# def foo():
# print('from foo')
# bar()
#
# foo()
# def max2(x,y):
# if x > y:
# return x
# else:
# return y
#
# def max4(a,b,c,d):
# res1=max2(a,b)
# res2=max2(res1,c)
# res3=max2(res2,d)
# return res3
#
# print(max4(1,2,3,4))
#二:函数的嵌套定义:一个函数内部又定义了另外一个函数
# def outter():
# x=1
# print('from outter')
# def inner():
# print('from inner')
# # print(x)
# # print(inner)
# inner()
#
# # outter()
# # inner
#
# outter()
# def f1():
# print('from f1')
# def f2():
# print('from f2')
# def f3():
# print('from f3')
# f3()
# f2()
#
# f1()
# from math import pi
# # print(pi)
#
# def circle(radius,action=0):
# """
# 圆形相关运算
# :param radius: 半径
# :param action: 0代表求面积,1代表求周长
# :return: 面积或者周长
# """
#
# def area(radius):
# return pi * (radius ** 2)
#
# def perimiter(radius):
# return 2 * pi * radius
#
# if action == 0:
# res=area(radius)
# elif action == 1:
# res=perimiter(radius)
#
# return res
#
#
# print(circle(10,0))
# print(circle(10,1))
# --------
#名称空间:
# 存放名字的地方,三种名称空间,
# (之前遗留的问题x=1,1存放于内存中,
# 那名字x存放在哪里呢
Python学习-函数
最新推荐文章于 2022-09-02 07:47:14 发布