一、python的函数
1、函数的定义
在Python中可以使用def
关键字来定义函数,而函数执行完成后我们会通过return
关键字来返回函数的执行结果。函数的作用在于将大量重复的代码封装起来,方便重复调用。
def get():
print("不带参数")
get() #不带参数
上面的例子就是一个简单的函数,并且该函数是不带参数的。
2、变量的作用域
变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。变量分为全局变量和局部变量。
全局变量:在函数或类之外定义的变量,作用域从定义的位置开始到整个模块(也可以理解成py文件)结束。全局变量一般作为常量使用,即该变量是不变的。函数内要改变全局变量的值,需要使用 global 声明一下。
局部变量:在函数体内申明的变量,只在函数内起作用。
局部变量的查询和访问速度比全局变量快,优先考虑使用,尤其是在循环的时候。在特别强调效率的地方或者循环次数较多的地方,可以通过将全局变量转为局部变量提高运行速度。总而言之,在循环结构中尽量不定义变量(包括不定义方法)。比如在for循环里头需要使用time.sleep()进行暂停,这时可以现在循环外把暂停定义好,a=time.time,然后在循环内直接使用a(1),这样能使运行的速度提升很多
通过locals()和globals()函数可以打印出所有的局部变量和全局变量。
a=1 #全局变量
def get():
b=2 #局部变量
print(b)
print(globals()) #打印全局变量
print(locals()) #打印局部变量
get()
全局变量和局部变量的效率比较
import time
import random
def global_test():
start=time.time()
for i in range(10000000):
a=random.randint(1,100)
end=time.time()
print("耗时{0}".format((end-start)))
global_test() #耗时5.018017768859863
def local_test():
start=time.time()
a=random.randint
for i in range(10000000):
a(1,100)
end=time.time()
print("耗时{0}".format((end-start)))
local_test() #耗时4.793867349624634
运行了好几次,结果都是下面的函数比上面的函数更省时间。
二、函数的参数
1、参数默认值
python函数可以没有参数,参数可以有默认值。带默认值的参数必须放在不带默认值的参数之后
def get(x,y,z=10):
return x + y + z
#如果z没有指定数值,则默认为10
get(10,12) #32
#z指定数值,则被赋值为11
get(10,12,11) #33
2、不定长参数
不定长参数允许我们输入0或者任意个参数,当一个函数的参数不明确个数时,就需要使用不定长参数,不定长参数用*表示。
# 用星号表达式来表示args可以接收0个或任意多个参数
def get(*args):
sum=0
# 可变参数可以放在for循环中取出每个参数的值
for i in args:
sum+=i
return sum
# 在调用get函数时可以传入0个或任意多个参数
print(get(1,2,3,4,5))
带参数名的不定长参数用**表示。
def get(**kwargs):
sum=0
# 字典类型
print(kwargs)
for i in kwargs.values():
sum+=i
return sum
print(get(a=3,b=4,d=5))
3、命名关键字参数
所谓命名关键字参数,就是写在号后的参数。它的作用在于在传入参数时必须以参数名=参数值
的方式传参,并且不能传入号后面没有明确的参数。
def get(*,a,b):
print(f"{a},{b}")
get(a=1,b=2) #1,2
get(1,2) #报错
get(a=1,b=2,c=3) #报错
命名关键字参数可以跟不定长参数混合使用。
三、python中的内置函数
python中有一类函数,不需要我们去进行定义也不需要我们import进行引入就可以直接使用,称之为内置函数,这些内置函数都是很有用也是最常用的,下面的表格列出了一部分的内置函数。
函数 | 说明 |
---|---|
abs | 返回一个数的绝对值,例如:abs(-1.3) 会返回1.3 。 |
bin | 把一个整数转换成以'0b' 开头的二进制字符串,例如:bin(123) 会返回'0b1111011' 。 |
chr | 将Unicode编码转换成对应的字符,例如:chr(8364) 会返回'€' 。 |
hex | 将一个整数转换成以'0x' 开头的十六进制字符串,例如:hex(123) 会返回'0x7b' 。 |
input | 从输入中读取一行,返回读到的字符串。 |
len | 获取字符串、列表等的长度。 |
max | 返回多个参数或一个可迭代对象中的最大值,例如:max(12, 95, 37) 会返回95 。 |
min | 返回多个参数或一个可迭代对象中的最小值,例如:min(12, 95, 37) 会返回12 。 |
oct | 把一个整数转换成以'0o' 开头的八进制字符串,例如:oct(123) 会返回'0o173' 。 |
open | 打开一个文件并返回文件对象。 |
ord | 将字符转换成对应的Unicode编码,例如:ord('€') 会返回8364 。 |
pow | 求幂运算,例如:pow(2, 3) 会返回8 ;pow(2, 0.5) 会返回1.4142135623730951 。 |
print | 打印输出。 |
range | 构造一个范围序列,例如:range(100) 会产生0 到99 的整数序列。 |
round | 按照指定的精度对数值进行四舍五入,例如:round(1.23456, 4) 会返回1.2346 。 |
sum | 对一个序列中的项从左到右进行求和运算,例如:sum(range(1, 101)) 会返回5050 。 |
type | 返回对象的类型,例如:type(10) 会返回int ;而type('hello') 会返回str 。 |