文章目录
引言
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。
Python 提供了许多内建函数,比如print()
,但你也可以自己创建函数,这被叫做用户自定义函数。
一、函数的定义和调用
1. 定义函数
-
定义函数的规则:
① 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
② 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数
③ 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明
④ 函数内容以冒号:起始,并且缩进
⑤ return [表达式]结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。 -
语法格式如下:
def 函数名(参数列表):
" 函数_文档字符串"
函数体
return 表达式
示例
def prt():
print("*")
print("***")
print("*****")
return 1
a=prt() #接收返回值
print(a)
#输出结果
*
***
*****
1
- 函数的返回值
Python中使用return语句返回结果
def add (a, b):
c = a + b
return c
#函数add中包含return语句,这意味着add函数有返回值,其返回值是a和b相加的结果。
3. 调用函数
函数的调用有两种情况:
- 在函数当前文件调用
- 在其他文件调用函数
- 当前文件调用:
#调用同文件的函数,只需要在函数下方写函数名
def function(a,b):
print(a+b)
function(1,2)
# 结果
3
- 不同文件调用:
#调用不同文件的函数,需要先导入:from文件路径 impo 函数名/*
# 例如:我在 2.py 想要调用 test 包里面的 1.py 的函数
--- 1.py 函数为:
def function(a,b): #像 a,b 这类不确定的参数一般叫做形参
print(a+b)
function(1,2) # 1,2 这种具体的参数叫做实参
--- 2.py 调用 1 中的 function 函数
from test.1 import function
function
# 结果
3
4. 参数传递
在 python 中,类型属于对象,变量是没有类型的:
a=[1,2,3]
a="Python"
//以上代码中,[1,2,3] 是 List 类型,"Python" 是 String 类型,而变量 a 是没有类型
它仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象
- 如果希望定义的函数可以计算任意两个数的和,我们在定义函数的时候,让函数接收数据,这就是函数的参数
#带参函数
#a和b就是函数的参数,它们可以可以接收调用函数时传入的任意两个数
def add(a,b): #形式参数、形参
print(a+b)
add(20,30) #实际参数、实参
add("qwe","asd")
add(2.3,5.8)
#输出结果
50
qweasd
8.1
def add(a,b):
print(a+b)
a+=1
b+=2
c=12
d=22.8
add(c,d)
add(d,d)
print(c,d)
#输出结果
34.8
45.6
12 22.8
二、参数
调用函数时可使用的正式参数类型有以下几种:
- 必需参数
- 关键字参数
- 默认参数
- 不定长参数
1. 默认参数
调用函数时,若默认参数未被传值,则会使用参数的默认值;
若默认参数被传入了值,则会使用传入的新值
带有默认值的参数一定要位于参数列表的末尾,否则程序会报错
参数默认值的使用场景:参数少的时候使用,例如姓名
def add(a,b=3): #形式参数,形参
print(a+b)
add(11,30) #实际参数,实参
#输出结果
41
2. 不定长参数
如果希望函数被调用时能够传入比定义时更多的参数,可以在定义函数时使用不定长参数
语法格式
def 函数名([formal_args,] *args, **kwargs):
"函数_文档字符串"
函数体、
return 表达式
#加星号(*)的参数args会以元组的形式存放未命名的参数;
#加**的参数kwargs会以字典的形式存放命名的参数,即形如key=value的参数。
示例
#元组的形式
def add(*a):
sum=0
for x in a:
sum+=x
print(sum)
add(1,2,3,4,5,6,7,8,9)
#输出结果
45
#字典的形式
def add(b,**a):
for x in a.items():
print(x)
add(1,a=2,c=3,d=4)
#输出结果
('a', 2)
('c', 3)
('d', 4)
用 **a 这种传参方式必须是 key=value 的形式
3. 必要参数
- 必需参数须以正确的顺序传入函数,调用时的数量必须和声明时的一样
- 调用 printme() 函数,你必须传入一个参数,不然会出现语法错误
示例
#可写函数说明
def printme( str ):
"打印任何传入的字符串"
print (str)
return
#调用 printme 函数,不加参数会报错
printme()
#输出结果
Traceback (most recent call last):
File "test.py", line 10, in <module>
printme()
TypeError: printme() missing 1 req