函数的基本操作
注:函数和数学的关系并不是很大
一.函数的定义与调用
函数原则:
1函数一定先定义后调用
2.定义(定义就是你在编写的过程阶段只检测不会执行代码.
符合语法条件乱输入也不会报错的)
3.调用(函数体代码只有在调用的时候在会执行.)
调用方式:函数名+()#如果有参数则直接传递参数
4.函数名其实就和我们之前所用的变量名一样的括号内也就是值(函数体代码)通过变量名(函数名)指向内存中函数体代码所在的位置
def neme():
print('姓名') #(定义阶段)
name() #(调用函数)
二.函数的分类
1.内置函数:就是我们使用的python解释器已经提前定义好可以直接调用的函数(len append 等)
2.自定义函数(程序员自己写的函数)
自定义函数又分为三类
2.1无参函数
def name(): #(括号内没有参数)
print('名字')
name()
# 函数名后括号内没有参数调用时括号内也不需要参数来调用(结果是:名字 直接打印)
2.2有参函数
def name(s): #(括号内有参数)
print('名字's)
name(thn)
#定义函数的时候因为你括号内有一个参数(可以当做变量名)所以调用函数的时候要给他一个值(当做变量值)
结果(名字thn)s = thn
2.3空函数
daf name()
pass
#空函数相当于一个单一框架可以大致罗列出程序大致功能.空函数大量使用就是一些项目功能框架搭建、
三.函数的返回值
1.函数的返回值其实就是在调用函数后返回的结果
s = thn
username = len(s)
print(username)
将len函数也就是个数赋值给变量username
结束是 3
2.获取函数的返回值
你定义的变量名就是进行函数调用所以可以获取函数的返回值
3.如何操作返回值
1.关键字‘return’同等于循环里的break本层结束的意思
没有结束指令那么他返回来值就是none
2.如果有return但是没有跟任何的(值)的时候,返回值也是none
3.当函数体代码写了return并且跟了数据那么就写什么返回什么(可以是任意类型)如果写的是变量名的时候那么他返回的就是变量名的值
def name():
print('名字')
name1 = 'thn'
return = name1
username = name()
print(username)
# 结果是 名字
thn
4.return后面也可有跟多个值逗号隔开他们会自动组成元组的形式返回
def name():
print('名字')
return = 'thn', 333, 222
uese = neme()
print(user)
#结果是 ('thn', 333, 222)
#注:这是以上无参函数
四.函数的参数
1.参数的两大类型
形参:括号内定义阶段写的参数
实参:括号内调用阶段写的参数
2.形参与实参关系
形参(变量名)实参(变量值)
调用函数时传入实参(临时绑定)
结束后(自动解除)
注:用你的时候呢随时在 不用你的时候随时甩
daf name(q, w):
print(q, w)
# q w定义时的形参
name(1, 2)
# 1 2调用时候的实参
ps:q == 1 w == 2 顺序来
name(3, 4)
ps:q == 3 w == 4 顺序来
甩了又能找到-.-
1.位置参数
1.位置形参.
def name(qwd, word): #qwd,word等位置形参
pass
2.位置实参.
name(123,'thn') # 123,thn位置实参
位置参数特征:
从左到右依次绑定(变量名)=(变量值)顺序要一致
个数要要一样多一个少一个都会报错
2.关键字参数
1.出现在实参中:指名道姓的给形参传值 不需要遵循位置
def name(q, w):
print(q, w)
name(q=3,w=4) # 直接绑定好结果很好猜
错误点:
name(q=3, 4)
关键字参数必须放在位置参数的后面
name(q, w=3)
形参只能绑定一个实参
name(q, w=4)
这个对的 只能相当于位置参数(从左到右)
3.默认参数
1.在定义阶段就已经赋予形参值了.
def name(q, w=4):
pass
2.后续如果不传值则使用的默认.
daf name(q, w=4):
prtin(q, w)
name(3)
结果 3 4
3.后续如果传值则使用传入的.
name(3,4)
结果 3 4
4.默认参数打破了形参和实参个数一样的情况:
默认参数必须定义在位置参数的后面
4.可变长参数
例1:
def name(*q):
print(q)
name(1,2,3,4,5,6,7,8,9,10,11)
注:*在形参中可以接受多余的位置参数并组织成元组的形式赋值给后边的变量名
# q = (1,2,3,4,5,6,7,8,9,10,11)
例2:
def name(a, b, *q)
print(a, b, q)
name(1,2,3,4,5,6,7,8,9,10,11)
# 按照顺序分
a = 1 b = 2 q =(3,4,5,6,7,8,9,10,11)
例3:
def name(a, b, **k)
print(a, b, k)
name(1,2,'name1', 'jason', 'age', 18)
# 按照顺序分
a = 1 b = 2 k ={'name1'='jason', 'age'=18}
注:用于接收多余的关键字参数 并且组织成字典的形式赋值给**后面的变量名
那么*a **k结合
例4:
def name(*a, **k):
print(a, k)
name(1,2,'name1'='jason', 'age'= 18)
# 按照顺序分
结果是
a=(1, 2)k={'name1' : 'jason', 'age' : 18}
def name(*args, **kwargs):
pass
只是a和k全称
*和**不单单可以在形参中使用 还可以在实参中使用
五.经典补充
*和**不单单可以在形参中使用 还可以在实参中使用
def name(*args(任意数据类型), **kwargs(字典)):
print(args, kwargs)
name(args(任意数据都数据都会变成元组传入).kwargs(将字典打散为关键字传入
'thn''18' 'thn'=18)