day12函数

函数

函数的语法

  1. def: 定义函数的关键字;

  2. 函数名:函数名指向函数内存地址,是对函数体代码的引用。函数的命名应该反映出函数的功能;

  3. 括号:括号内定义参数,参数是可有可无的,且无需指定参数的类型;

  4. 冒号:括号后要加冒号,然后在下一行开始缩进编写函数体的代码;

  5. “”“文档描述”"": 描述函数功能,参数介绍等信息的文档,非必要,但是建议加上,从而增强函数的可读性;与注释功能相同

  6. 函数体:由语句和表达式组成;

  7. return 值:定义函数的返回值,return是可有可无的。

函数的参数

参数

​ 有参数的函数被称为参函数

​ 无参的函数被称为无参函数

​ ps:可以再函数的结尾加上pass,意思为什么都不做,再写程序前我们可以想好需要实现什么功能,然后写一些空函数,最后往其中添加功能

def qaq():
	pass
	

实参与形参

实参:实际参数

#函数调用时实际往里面传入的参数为实参
login(1,2)#这个1,2即是实参

形参:形式参数

#函数括号中的参数,类似于注解的变量名
def login(user,password)#这个user和password即为形参

形参与实参的具体使用

1.根据形参的位置传值

​ 调用方法时若直接往内部传值,且方法内部有形参,则必须传与其对应的值,且不能乱顺序

def a(name,sex):
	return 0
a('姓名','性别')

2.关键字参数

​ 调用方法时可以用key—value的方式往内部传值

​ key为形参,value对应的是实参

a(name = '姓名' ,sex = '性别')#可以打乱顺序

3.默认参数

​ 定义函数时,可以为形参默认赋一个值,这样的话在之后调用函数的时候不赋值也没有关系

​ ps:默认参数必须在普通的形参之后,且只会在函数定义的时候被赋值一次(类似全局变量)

例如:def(name,sex='male')

​ 默认参数的值通常需要设为不可变类型

def foo(n,arg=[]):    
     arg.append(n)    
     return arg    
foo(1)    
>>>[1] 
foo(2)    
>>>[1, 2] 
foo(3)    
>>>[1, 2, 3]
#原因是默认参数只会在函数定义的时候被赋值一次,所以调用该方法不会被重新定义
可变长参数

指的是参数的个数不固定

#一个*
#这样子是不行的因为arg这个参数是在*test前面,因此传值的时候会被重新赋值成int,必须把默认参数放最后
def qaq(n, arg=[], *test):
    arg.append(n)
    print(test)
    return arg
qaq(1, 2, 3, 4, 56, 7, 8, 9)
#正确的
def qaq(n, *test, arg=[]):
    arg.append(n)
    print(test)
    return arg
qaq('1, 2, 3, 4', 56, 7, 8, 9)
>>>(56, 7, 8, 9)

ps:*列表 等于列表中的所有值

a=[1,2,3]
print(*a)
>>>1 2 3#不是列表
#给函数传列表必须在形参旁边加*,传值的也需要加*
a=[1,2,3]
qaq(1,*a)
#2个**能接受多余的关键字参数,并保存成字典的形式
#1个*只能接受不是关键字参数的值,接受关键字参数会报错
def a(c,**b):
    print(b)

a(c=1,b=1,a=1)
>>>{'b': 1, 'a': 1}
#可以直接传字典但必须在字典前加**

ps:argument有参数的意思

在实参前加*

#*会将其后的值打散成位置实参
nums = [1,2,3,]
func(*nums)
#**会将其后的值打散成关键字参数,只能跟字典
nums={1:2,2:3,3:4}
func(**nums)

命名关键字参数

​ 若希望函数的调用者必须以key=value的方式传值,python3有专门提供的语法来限制传值

def register(user,*,name):
    print(name)

register('qaq',name='sadnesspineapple')
ps:*后面的值必须传并且只能使用key=value(关键字传值)的方式
#*后面的参数被称为命名关键字参数

#*后面的值可以设置默认值,不过他是关键字参数,所以不会被覆盖,除非使用者调用此参数
def register(user,*,sex='男'):
    print(name)

register('qaq')

上述参数可以任意组合,但是顺序的定义必须是

位置参数,默认参数,*args(多余的普通参数保存成元组形式)

,命名关键字参数(key=value),**kwargs(多余的key—value保存成字典形式)

ps:可以把一个函数接受到的值传给另外一个函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值