1.函数
函数的命名:
- 纯小写
- 小驼峰命名法--------get_max_value
举个例子前面有提到 range 和我们常用的print
以上都是函数,他的功能已经定义好了,我们直接拿出来用就好了
1.1函数风格,详解
#函数 要先定义,再使用
def 函数名():
函数体----函数功能实现
pass #占位符
# 调用函数
函数名()
pass:当我们还不知道函数的内容怎么实现的时候,可以先使用pass,不然会报错的
函数体:可以是前面学习的所有的知识,逻辑处理等等
举个例子:
def get_max_value():
a = 12
b = 23
c = 40
max_value = a
if a < b:
max_value =b
if b < c:
max_value =c
print(max_value)
get_max_value()
打印:
40
1.2.1函数的参数设置 --------1必传参数
例如我们的第二张图,自主取款机器
我们在使用的时候,要刷证件才可以使用的。证件-----------函数的参数(形参)
实现功能的时候,需要使用者, (外部)提供数据才行
函数:实现功能,------一套逻辑 逻辑 + 可变的数据
# 定义的时候:参数---形参,形式参数,不是真正的数据,告诉使用者,你要用的时候要传这些值
# 变量表示。接受调用者的真实数据
def get_max_value(a, b, c):# 必传参数/位置参数
max_value = a
if a < b:
max_value =b
if b < c:
max_value =c
print(max_value)
#调用函数时,如果我们不传参数进去,会报错,告诉我们需要传三个参数abc
get_max_value()
打印:
TypeError: get_max_value() missing 3 required positional arguments: 'a', 'b', and 'c'
get_max_value(12, 23, 40)
打印:
40
可以使用debug打断点的方式来查看,代码的运行逻辑
总结:为什么叫必传参数?
就例如自动取款机,我们去取钱不插银行卡是肯定不行的。系统将一行卡当作是必须传入的数据,(银行卡可以理解为必传参数),上边的例子种,abc就是
1.2.2----------默认参数
给参数默认一个值,然后仍然按照顺序进行传参a=12 b=23
(顺序:看上图哦,一个参数对应一个值)
例1:
def get_max_value(a, b, c=100):# 默认参数
max_value = a
if a < b:
max_value =b
if b < c:
max_value =c
print(max_value)
get_max_value(12, 23)
打印:
100
例2:
如将默认函数放中间的话,他是会报错的。
因为规则:必传参数一定要放在前面,可传可不传的可以放在后边。
同样我们可以给三个参数都给默认值。
例3:
两个默认参数
例4:
三个默认参数
例5:
两个默认参数的情况下,调用函数重新给变量赋值
def get_max_value(a, b=40, c=30):
max_value = a
if a < b:
max_value =b
if b < c:
max_value =c
print(max_value)
get_max_value(12, 60)
打印:
60
这里 b =40重新赋值为60,所以求最大值为60
不管有没有默认参数,我们在传参时仍然是按照顺序来的,一个参数对应一个值
例6:
传参时可以指定参数传递
def get_max_value(a, b=40, c=30):
max_value = a
if a < b:
max_value =b
if b < c:
max_value =c
print(max_value)
get_max_value(12, c=60) # 指定一个参数传递, 形参(位置/必传)名字带上的话,就是指定了参数。 get_max_value(c=12, b=60, a=90) 也可以这么写
打印:
60
1.2.3----------可变参数
概念:参数个数不固定,传多少个都可以
*args
**kwargs
这里可以一print为例:
print("阿通", "苗苗", "垃圾") #可以输入多个参数--------*args
print("12345678")
打印:#下面打印之后会有一个换行的,
阿通 苗苗 垃圾
12345678
def sum(*args):
print(args)# args是一个元组
sum(1,2,3,4,5)#这里的参数我们一个
打印:
(1, 2, 3, 4, 5)
例题:
写一个累加的函数,不管你输入多少数字,都计算他的和
def sum(*args): #只有定义的时候要加 星
count = 0
for item in args:#args是一个元组
count += item
print(count)
sum(1, 2, 3, 4, 5)
打印:
15
扩展例题:拆包------------适用于元组和列表
计算一个列表内所有成员的和(列表内的成员都是数字)
[1,2,3,4,5]
注意:上边例题中 我们传参传的是数字。输入的格式是元组
#这里用到一个小知识,拆包---------脱外套
def sum(*args):
count = 0
for item in args:
count += item
print(count)
s = [1, 2, 3, 4, 5]
sum(*s)# 拆包
打印:
15
s = [1, 2, 3, 4, 5]
sum(s) #不拆包,会报错的,因为你传入的参数是一个列表
打印:
TypeError: unsupported operand type(s) for +=: 'int' and 'list'
1.2.4----------这几种参数的混合适用
1.2.4.1-------*args
num1是必传的参数,那么调用时的第一个值一定是给他的。
然后剩下的都给了*args
def sum(num1, *args, num3=400):
count = num1 + num3
for item in args:
count += item
print(count)
sum(100, 300, 200)
打印:
1000
‘’‘2020-0910-函数操作练习题 - 要有函数定义和调用哈!!
1、定义函数:(要求:定义函数处理逻辑。考虑参数哦!!)
将输入的所有数字相乘之后对20取余数
用户输入的数字个数不确定
‘’’
def quyu(*args):
ji = 1
for item in args:
ji *= item
yushu = ji % 20
print(yushu)
quyu(12, 17, 13)
打印:
12
‘’‘2、列表去重
定义一个函数 def remove_element(m_list):,将列表[10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1]去除重复元素
‘’’
def remove_element(m_list):
new = []
for item in m_list:
if item not in new:
new.append(item)
return new
m_list = [10, 1, 2, 20, 10, 3, 2, 1, 15, 20, 44, 56, 3, 2, 1]
res = remove_element(m_list)
print(res)
1.2.4.2-------**kwargs
**kwargs 传入的是字典格式,既然是字典那么我们传参就必须是key-value格式
def person_info(**kwargs):
print(kwargs)
person_info(height=177, age=18, name="阿通")
打印;
{'height': 177, 'age': 18, 'name': '阿通'}
用法于上边*args类似,但暂时用的较少