函数
所谓函数们就是为一段实现特定功能的代码“取”个名字,
以后即可通过盖名字来执行(调用)这段代码。
从逻辑上看,函数相当于一个黑匣子。
函数定义的3条铁律
函数需要几个关键的、需要动态变化的数据,这些数据就应定义函数的参数。
函数需要传出去几个重要的数据(就是调用该函数的人希望得到数据),这些数据应该定义返回值。
函数内部实现过程。
函数语法
在使用函数之前必须先定义函数,定义函数的语法格式如下:
def 函数名(形参列表):
//由零条到多条可执行性语句组成的函数
[return[返回值]]
无参数的函数
def first():
#原来学习的定义变量,赋值,运算,输出,分支,循环,全部都可以写在函数里
print("first函数")
for i in range(5):
print('i的值:',i)
#只要调用函数,函数中的代码就会执行一次
first()
#之啊哟执行函数,函数体的代码就可以被重复调用(复用)
first()
有参数的函数
def max (a, b):
r = a if a>b else b
#返回值
return r
#返回值的意思就是当程序调用之后,会得到N个值
x = max(5, 30)
print(x)
为函数提供文档
只要把一段字符串放在函数声明之后、函数体之前,这段字符串就是当函数的说明文档。
Python内置help()函数查看其他函数的帮助文档
也可通过函数的__doc__属性来查看寒素的说明文档
def test (a):
'''
test函数的说明,这是我们简单函数
:param a: a- 代表什么意思
:return: 代表说明意义
'''
#空语句
pass
print(test.__doc__)
多返回值函数
多返回值,本质就是返回元组。
程序既可返回元组,也可直接返回多个值(系统会自动将其封装成元组)
import random
#希望该函数返回三个随机的大写字符
def test ():
c1 = chr(random.randint(65,90))
c2 = chr(random.randint(65, 90))
c3= chr(random.randint(65, 90))
#以元组形式返回
return (c1,c2,c3)
return c1, c2, c3
多返回值函数的用法
既可用单个变量(元组)来获取
也可用多个变量来获取(元组解包)
import random
#希望该函数返回三个随机的大写字符
def test ():
c1 = chr(random.randint(65,90))
c2 = chr(random.randint(65, 90))
c3= chr(random.randint(65, 90))
#以元组形式返回
return (c1,c2,c3)
return c1, c2, c3
r = test()#r就是一个元组
print(r)
print(test())#元组
#多返回值函数,即可用多个变量来接受返回值,也可用单个变量来接收返回值
#多个变量,执行自动解包
c1, c2 ,c3 = test()
print(c1)
print(c2)
print(c3)
*c1, c2 =test()
print(c1, c2)
递归函数
函数体内调用它自身,被称为函数的递归。
函数递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。
无注意的递归
def foo():
print("11111")
print("2222")
foo()
foo()
递归注意点
向已知的方向递归
让递归由结束的时候,不要无限递归。
#计算阶乘
def frac (n):
if n < 1:
print("n不能小于1")
return
elif n ==1:
return 1
else:
#N的阶乘总是等于上一个阶乘**N
#函数调用自身
return frac(n - 1)*n
print(frac(int(input("请输入要计算的阶乘数:"))))
关键值参数
def info (name, age ,height):
print("名字:",name)
print("年龄:",age)
print("身高:",height)
#位置参数
info('fkjava',24,183)
#关键字参数(命名参数)——不需要按顺序
#优势 ; 1,不要按顺序2,可读性高
info(age=int(input("请输入您的年龄:")),name=input("请输入您的姓名:"),height=input("请输入您的身高:"))
#混合使用
info("hjk",height=188,age=12)
#混合使用错误:关键值参数必须位于位置参数的后面
info(name='dad', 18, 177)
参数默认值
形参名=默认值
一个参数默认值
def info (age,name='jae'):
print('name参数为:',name)
print('age参数为:',age)
#为参数指定默认值之后,调用时候可省略为该参数只当参数值(该参数将会使用默认值)
info(23)
info(34, 'dadas')
info(13,'dasdd')
#混合方式
info(19,name='haha')
两个参数默认值
def say_hi(name='八戒',message='欢迎来减肥'):
print('name:',name)
print('message:',message)
say_hi()
say_hi('白骨精')
#如果你希望省略给前面的参数指定参数值,后面的参数应该用关键字参数来传入参数值
say_hi(message='欢迎加入大家庭')