前言

人的细胞数量,约有37兆2千亿个。细胞们在你的身体的世界中,无休无眠地在工作着。趁热打铁,二话不多说开始进入函数之旅叭。其中,函数的参数及返回值是重点。

函数

什么是函数

函数就是对实现某一特定功能的代码的封装。这样做的好处是:函数能提高应用的模块性和代码的重复利用率。

打个简单的比喻,我们进店买喜茶、海底捞的时候,需要排队、点单、等待、买单等待繁琐的过程,但是通过食用市面上出售的瓶装喜茶、桶装海底捞,就能省去这些步骤,而后者就是封装。

举个栗子!就拿我们平常看到的验证码来说,这就是一个封装函数。直接调用函数名就可以生成n位随机数嗷(

1
2
3
4
5
6
7
8
9
10
11
import random
def validate_code(n):
s= 'qwertyuiopasdfghjklzxcvbnm1234567890' #验证码通常是26个英文字母加上10个数字组成
code = ''
for i in range(n):
r=random.choice(s)
code += r
print('验证码是:{}'.format(code))
validate_code(4)
validate_code(5)
validate_code(6)

输出结果如图

随机验证码

定义函数

1
2
3
def 函数名([输入参数]):
函数体
[return xxx]

注意:

1、英文字符以及冒号别遗忘(我经常忘冒号低级错误!

2、函数名要见名知意

3、参数之间用逗号隔开

4、函数体是实现函数功能的代码段,要tab缩进

5、return返回值,有时可以不写,下文介绍

函数调用

调用函数也就是执行函数。即把刚才定义的函数当成是一个工具,那么调用函数就相当于使用该工具。即函数名是调用函数的名称。很好理解,暂不赘述。

函数的参数

默认值参数

默认值是指在定义的时候就给定值,暂不赘述

形式参数

在定义函数时,函数名后面括号中的参数就是形式参数

1
2
3
4
5
def fun1(a,b,c): #abd是在函数定义括号内,为形参
print('a=',a)
print('b=',b)
print('c=',c)
fun1(10,20,30)

位置实参

指的是必须按照正确的顺序将实际参数传到函数中

1
2
3
4
5
def fun1(a,b,c): #abd是在函数定义括号内,为形参
print('a=',a)
print('b=',b)
print('c=',c)
fun1(10,20,30) # 依次将10赋给a,20赋给b,30赋给c。调用函数时传入的实参的数量和位置都必须和定义函数时保持一致。
1
2
3
4
#输出结果为
a= 10
b= 20
c= 30

关键字实参

能在调用的时候更加明确参数值是给谁的,因此不再需要与形参的位置完全一致,只要将参数名写正确即可。

1
2
3
4
5
6
def fun1(a,b,c):
print('a=',a)
print('b=',b)
print('c=',c)
fun1(10,20,30)
fun1(a=100,c=2000,b=3000)#与位置形参相比,位置可以不用一一对应
1
2
3
4
#输出结果为
a= 100
b= 3000
c= 2000

可变参数

指在定义或者调用的时候不能明确参数的个数,此时如何定义才可以使参数个数更加灵活呢?—答案是,我们可以用*args或者**kargs,那..什么时候用 *args什么时候用**kargs呢?

第一种情况

1
2
3
4
def fun1(*args):
print(args)
fun1(10)
fun1(10,20,30)
1
2
3
#输出结果为元组
(10,)
(10, 20, 30)

因此,无法事先确定传递的位置形参的个数时,用*args定义个数可变的位置形参

第二种情况

1
2
3
4
def fun2(**kargs):
print(kargs)
fun2(a=10)
fun2(a=10,b=20,c=30)
1
2
3
输出结果为字典
{'a': 10}
{'a': 10, 'b': 20, 'c': 30}

因此,无法事先确定传递的关键字实参的个数时,使用**kargs定义个数可变的关键字形参

返回值

return 语句指定应该返回的值,该返回值可以是任意类型

需要注意的是,return 语句在同一函数中可以出现多次,但只要有一个得到执行,就会直接结束函数的执行。

没有返回值的情况

只是完成一个操作,函数体内可没有return语句。调用会返回None

1
2
3
4
def fun():         
print('hello')
#return #return可以省略不写
fun() #调用fun()
1
2
输出结果为
hello

有返回值的情况

函数的最后会有一个返回值return,将函数执行的结果返出。

1
2
3
def fun3():
return'hello','world'
print(fun3()) #返回值是两个,要用到return
1
2
#输出结果是元组
('hello', 'world')

内置函数

数字相关

bool() 将给定的数据类型转换成bool值。如果不给值,返回False

int () 将给定的数据转换成int值。如果不给值,返回0

float () 将给定的数据转换小数

complex () 创建一个复数,第一个参数为实部,第二个参数为虚部。或者第一个参数直接用字符串来描述复数

1
2
3
4
number = '100'
print(int(number)) # 100
print(float(number)) # 100.0
print(bool(10)) # True

进制转换

bin() 将给的参数转换成二进制

otc() 将给定的参数转换成八进制

hex() 将给定的参数转换成十六进制

1
2
3
4
number=25
print(bin(number)) # 0b11001
print(oct(number)) # 0o31
print(hex(number)) # 0x19

数字运算

abs() 返回绝对值

divmode() 返回商的余数

round () 四舍五入

pow(a,b) 求a 的b 次幂,如果有三个参数.则求完次幂后对第三个数取余

sum() 求和

min() 求最小值

max() 求最大值

1
2
3
4
number = -10.58
print(abs(number)) # 10.58
print(round(number)) # -11
print(max(number,-9)) # -9

列表和元组

list() 将一个可迭代对象转换成列表

tuple() 将一个可迭代对象转成元组

reversed() 将一个序列翻转, 返回翻转序列的迭代器

slice() 列表的切片,格式是(初:末 :step :)

1
2
s = 'hello'
print(list(s)) # ['h','e','l','l','o']
1
2
3
lst = "hello! I am Running"
s = slice(1, 10, 3)
print(lst[s]) # eoI

字符串相关

str () 将数据转换成字符串

format() 与具体数据相关,用于计算各种小数.精算等

memoryview() 查看bytes的内存中的情况

ord() 输入字符找带字符编码的位置

chr() 输入位置数字找对应的字符

ascii() 是sdcll码中的返回值 不是就返回\u..

1
2
3
4
5
6
7
8
9
# 找到对应字符的编码位置
print(ord('s')) # 115
print(ord('苏')) #33487
# 找到对应编码位置的字符*
print(chr(115)) #s
print(chr(38597)) #雅,诶嘿嘿一不小心暴露真名
# 在sacll码中就返回这个值. 如果不是就返回\u..*
print(ascii('a')) *# 'a'*
print(ascii('苏')) *# '\u82cf'

数据集合

dict() 创建一个字典

set() 创建一个集合

frozenset() 创建一个冻结的集合.冻结的集合不能进行添加和删除操作

其他相关

len() 返回一个对象中的元素的个数

sorted() 对可迭代对象进行排序

enumerate() 获取集合的枚举对象

all() 可迭代对象中全部是True.结果才是True

any() 可迭代对象中有一个是True,结果就是Ture

zip() 函数用于将可迭代的对象最为参数.将对象中对应的元素打包成一个个元组

eval() 执行字符串类型的代码,并返回最终的结果

内存相关

hash() 获取到对像的哈希值(int str bool tuple)

id () 获取到对象的内存地址

以上内置函数算是比较常用的,其他就不一一列举啦