- 函数定义
- 函数调用
- 无参函数
- 一个返回值函数
- 多个返回值函数
- 关键字参数
- 默认值参数
- 可变参数
函数是定义好的一段可以重复使用的代码,在有需要的时候调用。之前我们使用过的print()就是内置函数,我们也可以自定义函数,来提高代码的复用性。
函数定义
-
函数定义
- def 关键字
- 函数名
- 形式参数
函数调用
-
函数调用
- 通过函数名调用
- 实际参数
无参函数
-
无参数的函数
- 定义
- 调用
代码例子
def star():
该函数的功能是打印小星星
row = 1
while row <= 5:
print("*" * row)
row += 1
调用:
star()
print(star.__doc__) # 打印函数star的文档注释内容
一个返回值函数
- 一个返回值函数
- 定义
- 调用
代码例子
def add(num1, num2):
:param num1: 数字1
:param num2: 数字2
:return: 两个数字之和
return num1 + num2
调用
a = add(1, 29)
多个返回值函数
-
多个返回值函数
- 定义
- 调用
代码例子
def max_and_min(nums):
max_num = nums[0] # 最大值
min_num = nums[0] # 最小值
for i in nums:
if i > max_num:
max_num = i
if i < min_num:
min_num = i
return min_num, max_num
调用
result = max_and_min([1, 2, 5, 10, -90, 100] # (-90, 100)
代码练习
1.函数的定义
def 函数名([参数名1,参数名2,....]):
函数封装的语句块
注意:
1.函数名符合标识符定义的规则,函数名后面要写上(),后面写上冒号(:)
2.函数定义时,()中的参数称之为形式参数
3.函数封装的语句块另起一行写,缩进4空格,且要对齐
4.[]不是函数定于语法中的一部分,仅表示是可选的
2.函数的调用
函数名([参数1,参数2,....])
注意:
1.函数只有调用过才会执行代码
2.函数调用时,()的参数称之为实际参数(定义并赋值过的变量或者数据)
3.无参数的函数
def star():
row=1
while row<=5:
print("*"*row)
row+=1
调用定义的函数
star()
star()
4.有返回值的函数
def add(num1,num2):
num1:第一个数
num2:第二个数
返回值,两个数的和
return num1+num2
调用
n1=20
n2=40
add(n1,n2)
保存函数调用后返回的结果
n3=add(n1,n2)
print(n3)
直接打印输出函数调用后返回的值
print(add(30,5))
print(star()) 返回None 表示空
print(type(None))
print(None+1) 不能当作数字进行运算
print(None+"123") 不能当作字符串进行运算
print(None and True)
5.返回多个值的函数
def max_and_min(mystr):
c1 = max(mystr)
c2 = min(mystr)
return c1,c2
调用
print(max_and_min("hfddshjkl"))
print(c1,c2) #c1,c2这里看不到(超出了c1,c2作用域)
def show():
print(n1,n2)
show()
c1,c2 = max_and_min("hjkdsa")
print(c1,c2)
练习
def is_palindrome(string):
"""
判断字符串string是回文
:param string:
:return:
"""
middle = len(string)//2
i=0
j=-1
n=0
while n<=middle:
if string[i+n]==string[j-n]:
n+=1
else:
mystr=string+"不是回文"
break
else:
mystr=string+"是回文"
return mystr
def is_palindrome(string):
判断字符串string是回文
:param string:
:return:
middle = len(string)//2
i=0
j=-1
while i<=middle:
if string[i]==string[j-i]:
i+=1
else:
mystr=string+"不是回文"
break
else:
mystr=string+"是回文"
return mystr
print(is_palindrome('abcddcba'))
print(is_palindrome('pythonohtyp'))
print(is_palindrome('bookkob'))
关键字参数
-
关键字参数
- 定义
- 调用
代码例子
def dog(keeper, name, age):
print("%s养了一条狗,它的名字叫做%s,它今年%d岁了" % (keeper, name, age))
调用:
dog("小明", "考拉", 2) # 按照参数位置调用
dog("小明", age=3, name="考拉") # 按照参数关键字传入参数
注意:调用函数时,关键字参数一定要放在位置参数的后面,否则会报错。
默认值参数
-
默认值参数
- 定义
- 调用
代码例子
def person(name, age=18, sex="男"):
print("name =", name)
print("age =", age)
print("sex =", sex)
# 上面的方法在定义时,包含了默认值
# 调用
person("小明", 20)
可变参数
-
可变参数
- 定义
- 调用
可变参数使用*args表示,传入的参数个数是可变的,函数中以元组接收多个参数。如果该参数不是最后一个参数,之后传入的参数必须以关键字参数形式传入。
代码例子
*args 可变参数
def test(*args, a):
print(args)
test(1, 2, 3, 5, a=10)
代码练习
函数定义
没有默认值参数的函数
def dog(keeper,name,age):
print("主人:"+keeper)
print("名字:"+name)
print("年龄:"+str(age))
位置参数
dog("小红","哈士奇",2)
关键字参数
dog(age=2,keeper="小红",name="哈士奇")
如果既有位置参数,又有关键字参数,注意位置参数必须在前面,关键字参数后面不允许出现位置参数
dog("小红",age=2,name="吉娃娃")
dog(keeper="小红",name="吉娃娃",age=2)
没有默认值参数的函数调用时必须提供实际参数
dog(keeper="小明") #报错
有默认值参数的函数
def person(name,sex='男',age=20):
print("名字:"+name)
print("性别:"+sex)
print("年龄:"+str(age))
person("张三")
person("李四",'女',22)
可变参数 - 参数的数量可变
def add(*num):
print(num)
add(2)
add(2,3)
add(2,3,4)
add()