Python学习笔记
函数
函数是什么
- 所谓函数,就是为一段为实现特定功能的代码“取个名字”,以后即可通过改名字来执行(或者说调用)这段代码。
- 从逻辑上来看,函数相当于是一个黑匣子。参数进入函数,返回值从函数出来。(注意在Python语言中,函数的参数和返回值都可以有无限个。)
函数定义的三条铁律
- 函数需要几个关键的、需要动态变化的的数据,这些数据就应该定义成函数的参数。
- 函数需要传出去几个重要的数据(就是调用该函数的人希望得到的数据),这些数据应该定义成返回值。
- 函数的内部实现过程。(特别是自定义的函数)
函数定义的语法
- 在使用函数之前必须先定义函数,定义函数的语法格式如下
def 函数名(形参列表):
//由零条到多条可执行语句组成的函数体
[return [返回值]]
- 注意:
return
语句最好都要写上,但是如果不想传出返回值,可以在后面不写任何东西。如果不想传入任何参数,也可以在括号内什么都不写。同时,记得带上冒号和缩进。
def first():
# 这里可以加上更多的语句
print("first函数")
for i in range(1,6):
print("i的值为: %d" % i)
print("i的值为:" , i)
# 只要调用了函数,函数中的代码就会执行一次
# 可以不传入参数,但是括号一定要带上
first()
- 如果想要定义有参数的函数,其实也并不复杂。
a = str(input())
def hello (name):
print("hello函数")
print("你好,%s" % name)
hello(a)
- 上面的函数如果我们输入了
lancibe
,输出结果是:
hello函数
你好,lancibe
- 如果传入多个参数或者形参列表中有多个参数,只需要将其以逗号隔开。
- 有返回值的函数写法:
def max(a,b):
return a if a > b else b
# 下面这一行作用是使input函数输入多个数据,这个会在后面讲到,这里仅仅使用它
a,b = map(lambda x : int(x), input().split())
print(max(a,b))
为函数提供文档
- 我们自己写的函数,为了让别人更轻易地看懂,我们要对函数写上说明文档。
- 只要把一段字符串放在函数声明之后、函数体之前,这段字符串就是函数的说明文档。
- 查看文档的两种方法:例如函数
zip
,可以使用help(zip)
或者zip.__doc__
(注意是前后各两道下划线)
多返回值函数
- 这个看起来是python里非常高端的、独特的内容,其实他就是序列封包,系统会将该返回值自动封包成一个元组,再进行赋值操作。
- 类比后我们知道,程序就可以直接返回元祖,也可通过封包直接返回多个值。
import random
# 该函数能随机返回三个大写字母
def _random():
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 = _random()
print(r)
a,b,c = _random()
print(a,b,c)
# 这里使用了前面学到的序列解包的知识点
c1, *c2 = _random()
print(c1,c2)
递归函数
- 函数体中调用了自身,被称为是函数的递归
- 函数递归包含了一种隐式循环,他会重复执行某段代码,但是这种重复执行无需循环控制。
- 如果没有跳出条件,程序在执行一段时间后会报出
maximum recursion depth exceeded in comparison
的错误,达到最大递归深度。 - 因此递归的注意点:向已知的方向递归,以及让递归有结束的时候,不要发生无限递归。
关键字参数
- Python函数的参数名不是无意义的,Python允许条用函数时通过名字来传入参数值(其实前面写的程序实例都是以这样的方式来进行的)
- 调用函数时,支持两种方式为参数指定值:
- 位置参数:必须按顺序为每个参数指定参数值
- 关键字参数(命名参数):按参数名为参数指定参数值。
def info(name , age, height):
print("name:%s" % name)
print("age:%d" % age)
print("height:%.2f" % height)
# 位置参数
info("lanibe", 18, 185.5)
# 关键字参数
info(age = 18, name = "LANCIBE" , height = 185.5)
- 关键字参数的优势:
- 不需要按顺序填写
- 可读性更高
- python也支持关键字参数和未知参数混合使用,但是关键字参数一定要在位置参数后面。(否则会直接报错)
参数默认值
- 程序需要在定义参数是为一个或多个形参指定默认值——这样调用函数时就可以省略为该形参传入参数值,而是直接使用该形参的默认值。(传不传都可以)
- 为形参指定默认值的语法格式如下:
形参名 = 默认值
,指定默认值的位置是在函数声明的函数头部分。如def func(a = 1,b):
就是定义了一个带默认值的参数。 - 对于有默认值的参数,调用函数时可以省略为该参数指定参数值。
- 如果要省略为前面的参数指定参数值,则需要使用关键字参数为后面的参数指定参数值。