1.recode
1.匿名函数
函数名= lambda 参数列表:返回值
匿名函数也是函数。
func1 = lambda a,b:pint(a,b)
函数体是一条语句,并且这条语句是有结果的(赋值语句没有结果)
2.变量的作用域
全局变量:没有声明在函数或类中的变量;从声明开始到文件结束,任何位置。
局部变量:声明在函数或者类中的类的变量。从声明开始到函数、类结束
global:在函数中声明一个全局变量/想要在函数中修改一个全局变量的值
nonlocal: 在局部的局部修改局部变量的值的声明
3.函数作为变量
声明函数就是在声明一个类型是function的变量。变量能做的,函数都能做。
函数名:一个函数
函数名():调用函数,得到返回值
函数作为参数:闭包
函数作为返回:装饰器(python特色)
4.函数的调用
调用过程就是一个压栈的过程,调用函数的时候系统会自动在栈区间开辟空间存储数据(变量)。
a,b=10,20
def fun1(a,b):
a,b=b,a
fun1(a,b)
print(a,b) #10,20
a,b=10,20
def fun1():
global a,b
a,b=b,a
fun1()
print(a,b) #20,10
5.递归函数:
自己调用自己的函数,循环能做的递归都可以做,但是能用循环的就不要用递归。
2.模块的使用
1.import
模块:python中一个py文件就是一个模块。
使用模块:可以通过import或者from-import在一个模块中去使用另一个模块的内容
语法:
import 模块名--->将模块中的所有的内容导入,并且可以在当前模块中通过“模块名. ”的方式去使用导入模块中的内容
from 模块名 import 变量1,变量2--->将模块中所有的内容都导入,但是只能使用导入的变量。
from 模块名 import * ---->将模块中所有内容模块导入,所有的全局变量
补充:
import 可以检查被导入的内容是否已经导入过,如果导入过,不会重复导入,导入多次,只执行一次。多种导入的效果可以同时生效(如重命名,导入的部分变量可直接使用)
代码执行到import的时候,会将import后面的模块的内容执行一遍
2.重命名
import 模块名 as 模块的新名字-->使用时用新名字
import test1 as TS
from 模块名 import 变量名 as 新名字,变量名2 as 新名字
from test1 import name as newname,name2 as newname2
3.选择性导入(阻止导入)
1.语法
if name=="main":
代码块
说明:
if name=="main":--->固定写法("main"+enter快捷键)
代码块-->执行当前模块时代码块可以执行,被别人导入这个模块时,不会导入这个代码块
2.name
每个模块都有这个属性,这个属性的默认值是当前模块对应py文件的文件名,当前模块正在被执行时,系统会自动将模块的name属性变成'main'
import shiyan12
print(shiyan12.name) #shiyan12
print(name) #main
**3.什么时候使用模块
将具有相同的功能的函数和数据封装到一起
3.迭代器
1.什么是迭代器(itemr)
迭代器是python中一种数据类型。属于序列。没有具体的字面量,可以将其他的序列转成迭代器:
语法:
iter(序列)
next(迭代器) 或者迭代器.next()
2.迭代器特点
只能通过next方法一个一个的获取迭代器中的元素(栈),取出后迭代器中就不存在这个元素了,相当于pop()。
iter1=iter("abcdefghijklmnopqrstuvwxyz")
print(iter1)
print(next(iter1))
print(next(iter1))
print(next(iter1))
print(next(iter1))
取完后在去会报错:StopIteration(没有找到结果)
3.遍历迭代器
for n in iter1:
print(n)
4.生成式和生成器
1.什么是生成器(generator)
生成器就是迭代器,但迭代器不一定是生成器
生成式就是生成器的一种特殊形式:(变量 for 变量 in 序列)o
gel=(x for x i range(10))
print(gel)
print(next(gel))
其他写法
ge1=(x for x in range(20))
ge2=(x for x in range(20) if x%2)
ge3=([x,x**4] for x in range(20))
生成式()中的相当于函数,需要时才执行,一次next()执行循环直到得到一个结果。
2.生成器就是函数体中有yield关键字的函数
函数中只要有yield,那么调用这个函数不再是执行函数且获得返回值,而是得到一个生成器
通过next获取生成器的元素时,会执行生成器对应的函数的函数体,执行到yield为止,并返回yield后面的值,然后保存当前结束位置,下次获取元素时接着上一次位置执行,执行到yield,取完在去会报错,StopIteration
def a():
for n in range(2):
yield n
if n>=0:
yield n
b=a()
print(next(b))
print(next(b))
print(next(b))
print(next(b))
0 0 1 1
生成器可以当成序列来使用
生成器a(),m=a(),n=a()生成了2个序列m,n
def a():
for n in range(2):
yield n
b=a()
d=a()
print(next(d))
print(next(b))
5.文件操作
使用本地文件可以做数据的持久化(本地化)--->数据库文件\txt文件\json文件\plist文件\二进制文件
1.文件操作--读写操作
读:取出文件中的数据
写:将数据写到文件中
所有的文件的操作过程:打开文件-->操作文件-->关闭文件
2.打开文件和关闭文件
1.打开文件
open(file)
返回值是打开的文件
file-->文件路径,
绝对路径(不推荐使用):
相对路径:./相对路径(相对当前py文件对应的文件夹)
./--->代表当前文件夹,
./某文件A/--->代表当前文件夹中文件A的子目录
../--->代表当前文件的上一层
mode-->文件打开方式(不同的操作对应不同的打开方式)
"r"-->以只读的形式打开文件,得到文本
"rb"/""br"-->读,得到的数据是二进制形式
"w"-->以写的形式打开文件
"wb"/bw"-->将二进制数据写入文件
"a"-->写操作,追加
encoding-->文本的编码方式
utf—8:几乎支持所有的语言文字
gbk:只支持英文
2.读文件
文件对象.read() 返回读到的内容(字符串或者二进制)
文件对象.redline() 读一行
文件对象.readlines()返回一个列表,列表中的内容是文件中的每一行
读文件会有位置信息,读完文件后再读就是空
3.写文件
"w"-->将字符串写入文件中,会覆盖原来的内容
文件对象.write("")
"a"-->追加内容(文件末尾)
4.关闭文件
文件对象.close()
网友评论