#如何定义一个函数:
def sayhi(x, y): #函数名字的命名规范和变量名字相同 都是字母数字下划线组成。后面加一个括号 里面可以传入相应的参数
res = x**y #对传入的参数进行运行计算
print(res)
print('my name is alex')
sayhi(2, 10) #函数只有在调用时才会进行函数体内的运算
# 函数减少代码量
#方便扩展易于修改
#方便维护
#认识参数:
def caloy(x, y): # 这里的参数‘x, y’是形式参数 只要函数不被调用就不会产生内存占用
res = x**y
print(res)
print('my name is alex')
sayhi(2, 10) # ‘2, 10’是实际参数 只要写了就会占用内存 ,同时这里可以传入任意值 比如 表达式,函数,str, 元祖,列表,,,,等等
#认识默认参数和位置参数:
def segrigit(name, age, cousre, country = 'CN'): #位置参数必须在默认参数之前 否则‘python’不知道应该怎样传参 这时会报错! 这里‘country = ‘CN’’就是一个默认参数 传参时默认参数你如果不传写就按照默认值打印 如果填写的话就按照传入的值打印
print('欢迎老表!')
print(name, age, country, cousre) #这里依然打印你指定的顺序
segrigit('alex', '25', 'python')
segrigit('ragin', '22', 'python')
segrigit('black girl', '23', 'python')
#关键字参数:
def segrigit(name, age, cousre, country = 'CN'):
print('欢迎老表!')
print(name, age, country, cousre)
segrigit('alex', '25',age = 26, 'python',) #关键字参数是在实参里面,同于默认参数 必须在实参里的位置参数之后 这里的‘age = 26’就是个关键字参数 然而他的位置放的是错误的这时python解释器就不知到该给形参传入哪个值 就会报错
报错信息:
File "D:/luffy/day6/默认参数位置参数.py", line 4
segrigit('alex', '25',age = 26, 'python',)
^
SyntaxError: positional argument follows keyword argument #这里的意思是关键字参数不能在位置参数之前
#非固定参数又称不定长参数1:
def segit(msg, *args, age): #‘×args’可以接受除前面一个位置参数之后的所有值但是不包括关键参数 它接收的值会存入一个元祖
for u in args:
print(msg, u)
lis = ['alex', 'agin', 'shanshan'] #一个列表
segit('别他妈浪了,赶紧回家吃饭啦!', 'alex', 'agin', 'shanshan', age = 22) #这里的所有除位置第一个参数和关键参数 都会给‘×args’
segit('别他妈浪了,赶紧回家吃饭啦!', *lis, age = 22) #这点是直接传入一个列表 但是列表前面必须加‘×’否则会当作一个整体传给‘×args’如:(‘['alex', 'agin', 'shanshan']‘) 同时列表 元祖啥的都可以传 但是不能是字典
#非固定参数又称不定长参数2:
def segit(*args, **kwargs): # ‘**kwargs’用来接收关键参数并储存到字典里面
print(args, kwargs)
dic = {'学历': '初中'}
segit(*dic) #这里会把一个字典放紧元祖
segit(**dic) #然而字典常用语传给’**kwargs‘
#输出结果:
('学历',) {}
() {'学历': '初中'} #如上所说!