def functionname([parameterlist])
["comments"]
[funcitonbody]
functionname:函数名
parameterlist:参数。可以为空,可以为多个参数,用逗号隔开
comments:可选参数
functionbody:可选参数,语句体调用函数后要执行的功能代码
自定义函数
def sum(num1,num2):
print(num1+num2)
def printstring(str):
print(str)
num1、num2、str都是函数的参数,在函数体中,函数类似于变量
函数调用、调用函数
>>> def sum(num1,num2):
print(num1+num2)
>>> sum(100,10)
110
>>>
- 实参:
- 值传递:实参为不可变对象时,改变形参的值,实参值不变
- 引用传递:实参为可变对象时,改变形参的值,实参的值也会改变
例1:
>>> def fun_bmi(person,height,weight): //定义函数
bmi = weight/height
print (bmi)
>>> fun_bmi("坏坏",1.78) //参数数量与定义的不同,缺少“weight”参数
Traceback (most recent call last):
File "" , line 1, in <module>
fun_bmi("坏坏",1.78)
TypeError: fun_bmi() missing 1 required positional argument: 'weight'
>>> fun_bmi("坏坏",56,1.78) //参数位置与定义不一致
0.031785714285714285
>>> >>> fun_bmi("坏坏",1.78,56) //正确的输出
31.46067415730337
# 关键字参数,用形参的名字确定输入的参数值,指定实参时,无需与形参的位置相同
>>> fun_bmi(height=1.78,weight=56,person="坏坏")
31.46067415730337
>>>
>>> def func(num):
num+=1
>>> a = 10
>>> func(a)
>>> print(a)
10
>>> def sum(list):
total=0
for i in range(len(list)):
print(list[i],'+',end="")
total+=list[i]
print('=',total)
>>> list=[15,25,35,45,55]
>>> sum(list)
15 +25 +35 +45 +55 += 175
>>>
这里在最后的一个输出会多一个
+
号,可以优化
>>> def print_dict(dict):
for (k,v) in dict.items():
print("dict[%s]="%k,v)
>>> dict={"b":"bad","o":"boy","B":"Bad"}
>>> print_dict(dict)
dict[b]= bad
dict[o]= boy
dict[B]= Bad
>>>
# *parameter可变参数
>>> def printplayer(*name):
print('我喜欢的歌手有:')
for item in name:
print(item)
>>> printplayer('许嵩')
我喜欢的歌手有:
许嵩
>>> printplayer('许嵩','孙子涵','owl ciy')
我喜欢的歌手有:
许嵩
孙子涵
owl ciy
>>>
>>> def printsign(**sign):
print()
for key,value in sign.items():
print("["+key+"]的专辑是:"+value)
# **可变参数
>>> printsign(许嵩="寻宝游戏",孙子涵="涵剧先森",owl="Good Time")
[许嵩]的专辑是:寻宝游戏
[孙子涵]的专辑是:涵剧先森
[owl]的专辑是:Good Time
>>>
使用已存在的列表作为函数的可变参数,在列表名称前加
*
使用已存在的字典作为函数的可变参数,可在字典的名称前面加**
- 返回值可以是任意类型,只要return得到执行,就会直接结束函数的执行
- 返回一个值,该值可以是任意类型
- 返回多个值,保存为一个元组
>>> def sum(num1,num2): #无返回值
num1+num2
>>> print(sum(2,3))
None
>>> def sum(num1,num2): #有返回值
num1+num2
return num1+num2
>>> print(sum(2,3))
5
>>>
例:输出一个列表中的偶数
>>> def filter_even(list):
list1=[]
for i in range(len(list)):
if list[i]%2==0:
list1.append(list[i])
i-=1
return list1
>>> list=[1,2,3,4,5,6,7]
>>> list2=filter_even(list)
>>> print(list2)
[2, 4, 6]
>>>
如果全局变量和局部变量重名,函数体内只有局部变量有效
>>> a = 50 #定义全局变量a
>>> def setNumber(): #定义函数内为局部变量,只在函数内有效
a=10
print(a)
>>> setNumber() #调用函数,输出函数内的变量值
10
>>> print(a) #未调用函数,输出全局变量的值
50
>>>
例:
>>> total=5 #全局变量
>>> def sum(num1,num2):
total=num1+num2 #函数内的为局部变量
print ("函数内是局部变量:",total)
return total
>>> sum(5,15) #调用函数,输出局部变量
函数内是局部变量: 20
20
>>> print("函数外是全局变量:",total) #未调用函数,输出全局变量
函数外是全局变量: 5
>>>
lambda[arg1[,arg2,...argn]]:expression
- 匿名函数主要应用在需要一个函数而不必去命名这个函数
- lambda函数看似只能写一行,却不同于C或C++的内联函数
- 内联函数的目的是调用小函数时不占用栈内存从而增加运行效率
# 使用def定义函数
>>> def aaa(i):
return 2+3*i
>>> aaa(5)
17
# 使用lambda定义函数
>>> d=lambda i :2+3*i
>>> d(5)
17
>>>
>>> def add(a,b):
return a+b
>>> add(2,3)
5
>>> e=lambda a,b :a+b
>>> e(2,3)
5
>>>
- lambda优势:
- 更精简,省略定义普通函数的过程,适合写脚本
- 提高了代码可读性
- 替代比较抽象且调用次数不多的函数,简化命名
函数 | 原型 | 说明 |
---|---|---|
abs() | abs(x) | 返回x的绝对值 |
pow() | pow(x,y) | 返回xy的值 |
round() | round(x,n ) | 返回浮点数x的四舍五入值,参数n指定保留的小数位数 |
divmod() | divmod(a,b) | 返回a除以b的商和余数,返回一个元组 |
函数 | 原型 | 说明 |
---|---|---|
lower() | str.lower() | 将字符串str中的字母转换为小写字母 |
upper() | str.upper() | 将字符串str中的字母转换为大写字母 |
swapcase() | str.swapcase() | 将字符串str中的字母大小写互换 |
capitalize() | str.capitalize() | 将字符串str中的首字母大写 |
title() | str.title() | 将字符串str中的首字母大写,其余小写 |
ljust() | str.ljust(width,[fillchar] ) | 左对齐输出字符串str,总宽度为width,不足部分以参数fillchar填充,默认为空格 |
rjust() | str.rjust(width,[fillchar]) | 右对齐输出字符串str,总宽度为width,不足部分以参数fillchar填充,默认为空格 |
center() | str.center(width,[fillchar]) | 居中对齐输出字符串str,总宽度为width,不足部分以参数fillchar填充,默认为空格 |
zfill() | str.zfill(width) | 将字符串str变成width长,并且右对齐,不足部分用0填充 |
例:
# 计算绝对值
>>> print(abs(-5))
5
>>> print(abs(5))
5
# 计算x的y次方
>>> print(pow(2,3))
8
>>> print(pow(3,2))
9
# 计算浮点数x保留n位小数
>>> print(round(4.567,1))
4.6
>>> print(round(4.567,0))
5.0
# 计算a除以b的商和余数,返回元组
>>> print(divmod(10,3))
(3, 1)
>>> print(divmod(16,3))
(5, 1)
>>>
>>> str1 = "i am bad boy"
>>> str2 = "I AM BAD BOY"
>>> str3 = "I Am Bad Boy"
>>> str4 = "i am Bad Boy"
# 将字母转换为小写
>>> print(str2.lower())
i am bad boy
>>> str2 #变量的值不会改变
'I AM BAD BOY'
# 将字母全部转换为小写
>>> print(str1.upper())
I AM BAD BOY
# 将字母的大小写互换
>>> print(str3.swapcase())
i aM bAD bOY
# 字符串中的首字母大写
>>> print(str1.capitalize())
I am bad boy
# 将字符串中的首字母大写(每个)
>>> print(str4.title())
I Am Bad Boy
>>>
>>> str="i am bad boy"
# 字符串居左对齐,长度为20,不足部分用*补齐
>>> print(str.ljust(20,"*"))
i am bad boy********
# 字符串居右对齐,长度为20,不足部分用+补齐
>>> print(str.rjust(20,"+"))
++++++++i am bad boy
# 字符串居中对齐,长度为20,不足部分用-补齐
>>> print(str.center(20,"-"))
----i am bad boy----
# # 字符串居右对齐,长度为20,不足部分由0补充
>>> print(str.zfill(20))
00000000i am bad boy
>>>
拓展:
split()
通过指定分隔符对字符串进行切片str.split(str="", num=string.count(str))
splitlines()
按照行(’\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表str.splitlines([keepends])
join()
将序列中的元素以指定的字符连接生成一个新的字符串str.join(sequence)
# 以空格为分隔符,将字符串分割
>>> str1="i am Bad boy"
>>> list1=str1.split(" ")
>>> print(list1)
['i', 'am', 'Bad', 'boy']
# 去除换行,将字符串一行输出
>>> str1="I am \nBad boy"
>>> print(str1)
I am
Bad boy
>>> list1=str.splitlines()
>>> print(list1)
['i am bad boy']
# 以*连接list1中的元素
>>> list1=["I","Am","Bad","boy"]
>>> str1="*"
>>> print(str1.join(list1))
I*Am*Bad*boy
>>>
>>> help() #进入命令查询
...
help> print #查询命令帮助
...
help> quit #退出
...
>>> help(list) #查看命令帮助手册
双击就可以查看命令帮助手册
>>>
>>> a="555"
>>> print(type(a))
<class 'str'> #字符串
>>> b=555
>>> print(type(b))
<class 'int'> #整型
>>> c=["b","a","d"]
>>> print(type(c))
<class 'list'> #列表
作业练习:答案参考【GitHub】
以上内容均属原创,如有不详或错误,敬请指出。