8.15(day16)模块的四种形式,import与from,,,import,循环导入,模块搜索路径,Python文件的两种用法,random模块
复习
函数的定义
def 函数名():
code
return 返回值
定义函数的三种方法
- 有参函数
- 无参函数
- 空函数
函数返回值
- return 终止函数
- 返回值 可以返回多个值, 以元组形式存储
- 默认返回None
Nonetype ....
函数调用
函数名()
函数的参数
形参
描述意义
位置形参
一个一个从左到右
默认形参
默认值, 默认形参必须放在位置形参的后面
实参
具有具体的值
位置实参
一个一个从左到右传值给形参
关键字实参
键值对的形式传给形参 ; 关键字实参必须放在位置实参的后面
可变长参数
*
形参
接收多余的位置实参,以元组的形式存储
实参
打散元组,以位置实参的形式传参给形参
**
形参
接收多余的关键字实参,以字典的形式存储
实参
**{'a':1} --> a=1
打散字典,以关键字实参的形式传给形参(形参必须得有这个key的形参名)
函数对象
- 引用
- 函数的参数
- 函数的返回值
- 容器类元素
函数对象 是 函数名 == 变量名
函数的嵌套
def f1():
def f2():
pass
名称空间和作用域
- 内置
- 全局
- 局部
执行顺序: 内置 --> 全局 --> 局部
查找顺序: 当前 --> 局部 --> 全局 --> 内置
全局作用域:
局部作用域
- 全局作用域(x=1)和局部作用域的(x=3)毫无关联
- 局部作用域1的(x=1)和局部作用与2的(x=3)毫无关联
闭包函数
把函数A和变量x包在函数B内部,然后通过函数B的返回值返回出函数A对象
def B(x):
# x = 1
def A():
print(x)
pass
return A
装饰器
用来给函数加功能的,他的本质也是函数
- 不改变被装饰函数的源代码
- 不改变被装饰函数的调用方式
def outter(func):
def wrapper(*args,**kwrags):
# 逻辑
res = func(*args,**kwargs) # func是被装饰的函数
return res
return wrapper
@outter
def index():
pass
def sanceng(engine):
def outter(func):
def wrapper(*args,**kwrags):
# 逻辑
res = func(*args,**kwargs) # func是被装饰的函数
return res
return wrapper
return outter
@sanceng(engine)
def index():
pass
迭代器
可迭代对象: 具有iter方法的对象, 可迭代对象不一定是迭代器对象
迭代器对象: 具有iter和next方法的对象, 迭代器对象一定是可迭代对象, 迭代器对象加上iter方法还是迭代器本身
for 循环原理
for i in lt:
- 把lt变成迭代器对象
- 然后迭代使用next方法获取每一个元素
- 捕捉异常中断while循环
三元表达式
print(1) if i > 10 else print(2)
列表推导式
[i for i in range(10)] # 0-9已经拿出来了
字典生成式
{k:v for k,v in dic.items()}
生成器表达式
(i for i in range(10)) # 不去使用next取值,是没有值的
生成器
自定制的迭代器
def func():
yield
yield:
1. 暂停函数,遇到下一个yield继续运行函数体代码
- 具有返回值
- 让函数()变成生成器对象
return:
1. 终止函数
- 返回值
递归
函数调用函数本身,但是必须得有结束条件
内置函数
内置函数是直接用的,属于python解释器的
数据类型的内置函数只有数据类型本身才能使用
enumerate()
面向过程编程
流水线
优点: 思路清晰
缺点: 可扩展性差 ; 功能与功能之间不独立 ; 调试麻烦
模块的四种形式
1.自定义模块
2.第三方模块
3.内置模块
4.包,一系列模块组织在一起的文件夹
import 和 form,,,import
# import 与 from import
# import .直接调用模块
# 1.生成名称空间
# 2.运行time.py文件,把time.py文件名称空间放入time名称空间,
# 3.time导入import或from,,,import 的名称空间
# import time
# time.方法() 不能直接用方法名
# form time import gmtime
# print(gmtime())
# 1.内存中生成time名称空间
# 2.
# 3.把gmtime方法直向import和from import .py(当前导入time模块的文件)的名称空间
# 多个时
# from time import gmtime, , ,
循环导入
模块搜索路径
Python文件的两种用法
第一种:执行文件
第二种:模块文件
random模块
# random模块 随机数
# import random 导入
# print(random.random()) 随机0到1的小数
#
# print(random.randint(1,3)) 不会去3
#
# print(random.randrange(1,3)) [1.3)之间整数
#
# print(random.uniform(1,3)) 取小数(1.3)
#
# print(random.choice([1,'23',[4,5]])) 随机取一个
#
# print(random.sample([1,'23',[4,5]],2)) 容器中选择多个
#
# lis = [1,3,5,7,9] 打乱容器
# random.shuffle(lis)
# print(lis)