python之函数参数详解

python版本3.8.1

一、函数

1.函数是就是一个对象,有自己的属性
def bmi(height,weight):
	#双或三引号中输入的注释,可以通过 函数名.__doc__ 得到
	#使用 print(bmi.__doc__)打印
	"计算BMI的值"
	bmi_value = round(weight/(height*height),1)
	#如果返回多个值,多个值被包在元组里
	if(bmi_value < 18.5):
		return bmi_value,'多吃点'
	elif(bmi_value <= 24):
		return bmi_value,'你真棒!'
	else:
		return bmi_value,'多运动'

print(bmi)             #<function bmi at 0x000001E7FAD161F0>
print(bmi.__name__)    #bmi
print(bmi.__doc__)     #计算BMI的值
2.可以被赋值
f = bmi
print(f(1.72,50))   #(16.9, '多吃点')
print(f.__name__)   #bmi
print(f.__doc__)    #计算BMI的值
3.可以被传递
def main(check):
	height = float(input('输入身高'))
	weight = float(input('输入体重'))
	print(check(height,weight))

main(bmi)

在这里插入图片描述

二、函数参数

1.位置参数
def calc(a,b,c):
	print(a*a + 2*b + c)

calc(3,5,8)         #27 
2.关键词参数
calc(b=5, c=8, a=3) #27
3.混搭

先位置,后关键词

calc(3,5,c=8)       #27
4.强制关键词参数
def c2(*, a, b, c):
	print(a*a + 2*b + c)

c2(a=3,b=5,c=8)      #27
#如果输入c2(3,5,8)会报错
#TypeError: c2() takes 0 positional arguments but 3 were given
#c2(3, 5, 8)
5.默认参数

先非默认参数,后默认参数

def c3(a, b, c=0): #不传c的时候,默认为0,传的话按传入的值
	print(a*a + 2*b + c)

c3(3,5)    #19
6.可变参数(位置)

先固定参数,再可变参数

#定义方法时,参数前加了*,表示是一个可变参数,参数个数可以是0到无穷多个的位置参数
def hello(msg, *names): 
	print('Hello',names,msg)
	print('Hello',*names,msg)    #*names对元组进行拆包

hello('新年好','zhangsan','lisi','wangwu','zhangliu')
#输出
#Hello ('zhangsan', 'lisi', 'wangwu', 'zhangliu') 新年好
#Hello zhangsan lisi wangwu zhangliu 新年好
7.可变参数(关键词)
def hello(msg, **names):
	print('老大是: ',names['BOSS'],msg)
	print('老二是: ',names['BOSS2'],msg)

hello('新年好',BOSS='张三',BOSS2='李四')
#输出
#老大是:  张三 新年好
#老二是:  李四 新年好
8.进一步混搭
#顺序必须是:必选参数、可变位置参数、命名关键字参数和可变关键字参数

def f(a,b,c,d,*args,e,f,**kwargs):
	print(a,b,c,d,e,f)
	print(args)
	print(kwargs)

f(1,2,3,4,5,99,e=6,f=7,x=8,y=9,z=10)
#输出
#1 2 3 4 6 7
#(5,99)
#{'x': 8, 'y': 9,'z':10}
9.强制位置参数

/ :python版本在3.8以后才有

#/前面的参数一定是位置参数
#a,b一定是位置参数,c,d可以是位置参数也可以是关键字参数
#e,f一定是关键字参数
#kwargs是可变关键字参数
def f(a, b, /, c, d, *, e, f, **kwargs):
	print(a, b, c, d, e, f)
	print(kwargs)

f(3,4,5,6,e = 7,f = 8,x = 9,y = 10)
#输出
#3 4 5 6 7 8
#{'x': 9, 'y': 10}
10.函数调用 - 开包列表和元组

使用*进行开包、打包

#列表
def hello(msg,name1,name2,name3):
	print('Hello',name1,name2,name3,msg)

names_param = ['张三','李四','王五']
hello('您好',*names_param)  #输出:Hello 张三 李四 王五 您好

def hello(msg, *names):   #*names会将传过来的数据打包
	print('Hello',*names,msg)  #打印时将names拆包

names_param = ['张三','李四','王五']
hello('您好',*names_param)   #调用之前首先拆掉元组
#输出:Hello 张三 李四 王五 您好

#元组
def hello_1(msg, *names):   #*names会将传过来的数据打包
	print('Hello',names,msg)

names_param = ('张三','李四','王五')
hello_1('您好',*names_param)   #调用之前首先拆掉元组
#输出:Hello ('张三', '李四', '王五') 您好
def hello_2(msg, *names):   #*names会将传过来的数据打包
	print('Hello',*names,msg)  #打印时将names拆包

names_param = ('张三','李四','王五')
hello_2('您好',*names_param)   #调用之前首先拆掉元组
#输出:Hello 张三 李四 王五 您好
11.函数调用 - 开包字典

使用**进行开包、打包

def hello(msg, **names):
	print(names)
	print('老大是: ',names['BOSS'],msg)
	print('老二是: ',names['BOSS2'],msg)

data = {'BOSS':'张三','BOSS2':'李四'}
hello('新年好',**data)

#输出
#{'BOSS': '张三', 'BOSS2': '李四'}
#老大是:  张三 新年好
#老二是:  李四 新年好

三、全局变量

在函数内改写全局变量,需要用global关键词

count = 8

def work():
	global count #这个count就是外面的count
	count = 10
	print(count)

work()
print(count)

输出

10
10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值