使用函数目的:降低编程难度和代码重用
函数是一种功能抽象,利用它可以将一个复杂的大问题分解成一系列简单的小问题,然后将小问题继续划分成更小的问题,当问题细化到足够简单时,解决完小问题,大问题也就解决了。
函数可以在一个程序的多个位置使用,也可以用于多个程序,当需要修改代码时,只需要在函数中修改一次,所有调用位置的功能都更新了,这种代码重用减少了代码行数和降低了代码维护难度。
1. 声明和调用函数
1.1 自定义函数
def 函数名(参数列表)
函数体
参数列表可以没有参数,但是要保留()
def PrintWelcom():
print("欢迎使用python")
定义一个函数sum(),用于计算并打印两个参数的和
def sum(num1,num2):
print(num1+num2)
1.2 调用函数
先定义函数,再调用函数。可以直接使用函数名来调用函数。
def PrintWelcom():
print("欢迎使用python")
PrintWelcom()
def sum(num1,num2):
print(num1+num2)
sum(1,2)
1.3 变量的作用域
在函数中定义的变量叫局部变量,在函数体外定义的变量是全局变量。
a = 100 #全局变量
def setNumber():
a = 10 #局部变量
print(a) #打印局部变量
setNumber()
print(a) #打印全局变量
#运行结果:10 100
2. 参数与返回值
2.1 在函数中传递参数
2.1.1 普通参数
值传递:调用函数时将常量或变量的值(实参)传递给函数的参数(形参)
值传递的特点:实参和形参分别存储在各自的内存空间中,因此,在函数内部改变形参的值时,实参的值一般是不会改变的。
def func(num):
num += 1
a = 10
func(a)
print(a)
#运行结果:10
2.1.2 列表和字典参数
注意:在使用列表或字典作为函数参数时,在函数内部对列表或字典的元素所做的操作会影响调用函数的实参。
def sum(list): #定义一个求和函数
total = 0 #初始化变量
for x in range(len(list)):
print(list[x],"+)
total += list[x]
print("=",total)
list = [15,25,35,45]
sum(list)
def print_dict(dict):
for(k,v) in dict.items(): #items()函数返回字典的所有键值对
print("dict[%s]="%k,v)
dict = {'a':'apple','b':'banana','g':'grape','o':'orange'}
print_dict(dict)
'''运行结果:
dict[a]=apple
dict[b]=banana
dict[g]=grape
dict[o]=orange'''
2.1.3 参数的默认值
可以在定义函数时,直接在参数后面使用“=”为其设置默认值。在调用函数时可以不指定拥有默认值的参数的值,此时在函数体中以默认值作为该参数。
注意:有默认值的参数只能出现在没有默认值的参数的后面。
2.1.4 可变长参数
python 还支持可长度的参数列表,可变长参数可以是元组或字典。
2.1.4.1 当参数以*开头时,表示可变长参数被视为一个元组,格式:def func(*t);
在func()函数中t被视为一个元组,使用t[index]获取每一个可变长参数。
可以使用任意多个实参调用func()函数,例如:func(1,2,3,4)
def func1(*t)
print("可变长参数数量如下:")
print(len(t))
print("依次为:")
for x in range(len(t))
print(t[x])
func1(1,2,3,4)
'''运行结果:
可变长参数数量如下:
4
依次为:
1
2
3
4'''
2.1.4.2 当参数以**开头时,表示可变长参数被视为一个字典,格式:def func(**t)
def sum(**t):
print(t)
sum(a=1,b=2,c=3)
#运行结果:{'a':1,'b':2,'c':3}
2.2 函数的返回值
可以为函数指定一个返回值,返回值可以是任何数据类型,使用return语句可以返回函数值,并退出函数。
def sum(num1,num2):
return num1+num2
print(sum(1,3))
#运行结果:4
也可以把列表或字典作为返回值。
def filter_even(list): #参数为列表的函数
list1 = [] #创建空列表来存放
for i in range(len(list)): #遍历列表
if list[i]%2==0: #判断是否为偶数
list1.append(list[i]) #如果为偶数,则添加到空列表里
return list1 #返回元素全是偶数的列表
list = [1,2,3,4,5,6,7,8,9,10]
list2 = filter_even(list) #调用函数
print(list2) #打印偶数列表
#运行结果:[2,4,6,8,10]
3. python内置函数
3.1 数学运算函数
- abs():求绝对值
- pow(x,y):求x的y次幂
- round(x,[n]):返回浮点数x的四舍五入值,参数n为指定保留的小数位数
- divmod(a,b):返回a除以b的商和余数,比如divmod(a,b)返回(a/b,a%b)
3.2 字符串处理函数
3.2.1 字符串中字符大小写的变换
- str.lower():将字符串内所有字母转换为小写
- strr.upper():将字符串内所有字母转换为大写
- str.swapcase():将字符串内所有字母大小写互换
- str.capitalize():将字符串中首字母大写,其余为小写
- str.title():将字符串中每个词的首字母大写,其余为小写
3.2.2 指定输出字符串时的对齐方式
- str.ljust(width,[fillchar]):左对齐输出字符串str,总宽度为参数width,不足部分以参数fillchar指定的字符填充,默认使用空格填充。
- str.rjust(width,[fillchar]:跟上面的用法一样,但是是右对齐。
- str.center(width,[fillchar]):居中对齐。
- str.zfill(width):把字符串str变成width长,并且右对齐,不足部分用0补足。
3.2.3 搜索和替换
- str.find(substr,[strat,[end]]):返回字符串str中出现字串substr的第一个字母的位置,如果str中没有substr,则返回-1。搜索范围从start到end。
- str.index(substr,[strat,[end]]):与find()函数相同,区别在于如果在str中没有substr时,index()会返回一个运行时错误。
- str.rfind(substr,[strat,[end]]):返回从右算起,返回字符串str中出现字串substr的第一个字母的位置。
- str.rindex(substr,[strat,[end]]):与rfind()函数相同,区别在于如果在str中没有substr时,index()会返回一个运行时错误。
- str.count(substr,[start,[end]]):计算substr在str中出现的次数,统计范围从start到end。
- str.replace(oldstr,newstr,[count]):把str中olestr替换为newstr,count为替换次数。
- str.strip([chars]):把字符串str中前后chars中有的字符全部去掉,如果不指定参数chars,则会去掉空白符(包括'\n','\r','\t'和' ')。
- str.lstrip([chars]):把字符串str中前面chars中有的字符全部去掉,如果不指定参数chars,则会去掉空白符(包括'\n','\r','\t'和' ')。
- str.strip([chars]):把字符串str中后面chars中有的字符全部去掉,如果不指定参数chars,则会去掉空白符(包括'\n','\r','\t'和' ')。
- str.expandtabs([tabsize]):把字符串str中的tab字符替换为空格,每个tab替换成tabsize个空格,默认是8个。
3.2.4 分割和组合
- str.split([sep,[maxsplit]]):以sep为分隔符,把str分割成一个列表,maxsplit为分割的次数。
- str.splitlines([keepends]):把str按照行分隔符分为一个列表,参数keepends是一个bool值,如果为True,则每行后面会保留分隔符。
- str.join(sep):把sep代表的序列——字符串序列,用str连接起来。
3.2.5 字符串判断相关
- str.startswith(substr):判断str是否以substr开头。
- str.endswith(substr):判断str是否以substr结尾。
- str.isalnum():判断str是否全为数字或字母
- str.isalpha():判断str是否全为字母
- str.isdigit():判断str是否全为数字
- str.islower():判断str是否全为小写字母
- str.isupper():判断str是否全为大写字母