函数基础
函数简介
- 定义:具有特定功能的一段代码。
- 优点:
- 可以减少代码的重复书写
- 可以将功能的实现着和使用者分开,提高开发效率
- 分类:
- 库函数:print、input、type等
- 自定义:用户自己封装的函数
函数使用
-
基本格式:
def 函数名([参数列表]): 函数体
-
函数名:
- 像变量名一样,只要符合标识符命名规范即可。
-
函数调用:
- 调用格式:
函数名([参数])
- 说明:函数不调用是不执行的,只有调用后才会执行
- 调用格式:
函数分类
-
说明:按照有无参数及返回值来分
-
示例:
# 无参无返回值 def print_ten_hello(): for i in range(10): print('hello world!') # 无参:调用时无需传参数 # 无返回值:执行完函数的返回值为None # None的一个作用是为了不报错,仅仅只是这样 # ret=print_ten_hello() # print(print_ten_hello()) # # 带参无返回值 def print_n_hello(n): for i in range(n): print('hello world!') # 需要传递参数 print_n_hello(3) # 带参有返回值 def add(a, b): ret = a+b # 使用关键字return返回内容 # 一旦执行return,函数立即结束 # return后面会返回函数返回值 return ret print(add(3,5))
函数参数
-
形参:形式参数,就是写在函数定义处的参数。
-
实参:实际参数,就是在函数调用时传递的参数。
-
位置参数:函数定义时没有默认值的参数,也叫必传参数。调用时实参与定义时的形参要一一对应
-
默认参数:函数定义时有默认值的参数,调用函数时可以不传递该参数。默认参数需要放在末尾
-
关键字参数:函数调用时指定参数的名字,参数的位置就无需考虑。
-
可变长度参数:
def var_len_args(a, b, *args, name='二狗', **kwargs): print(a, b) # 是一个元组,用于保存多传的位置参数 print(args) # 是一个字典,用于保存多传的关键字参数
-
*的使用
def show(a, b=8): print(a, b) lt = [2, 3] # show(lt[0], lt[1]) # 与上式等价,*是将列表展开,然后作为位置参数传递给函数 show(*lt) d = {'a': '大花', 'b': 18} # show(a=d['a'], b=d['b']) # 与上式等价,**式将字典展开,然后作为关键字参数传递给函数 show(**d)
函数进阶
- 函数定义的位置是随意的吗?
- 不是,函数调用一定要放在定义之后,也就是先定义再调用。
- 函数的名字是否可以相同?
- 不可以,虽然语法不报错,但是后者会覆盖前面的同名函数。
- 函数内部能否定义另一个函数?
- 能,函数内部定义的函数叫内部函数,它是很多高级功能实现的基础。
常用函数
-
内置函数(无需导入)
print:打印,输出 input:输入 type:获取类型 len:统计元素个数 range:产生连续的整数对象 enumerate:枚举可迭代对象 ord:字符转ASCII chr:ASCII转字符 abs:求绝对值 类型转换:int、float、str、bool、set、list、tuple、dict max:最大值 min:最小值 sum:求和 pow:求幂 round:四舍五入 hex:十六进制 oct:八进制 bin:二进制
-
模块函数(需要导入)
import time # # while True: # print('Hello world!') # time.sleep(1) import math print(math.e) print(math.pi) print(math.ceil(3.1)) print(math.floor(3.9)) print(math.sqrt(4)) # 度转换为弧度 print(math.radians(360)) # 弧度转换为度 print(math.degrees(math.pi)) import sys # 是一个列表,保存所有的命令行参数 print(sys.argv)