阅读文本大概需要 6.1 分钟
写在前面
又到了一年一度的六一儿童节,在这里祝自己以及各位小伙伴节日快乐!也许你会说我永远都十八岁,可我只想傲娇地告诉你,我每天都在过六一,好吧。
自从国家教育局把与编程相关的学科内容纳入高中必修课之后,意味着在未来学习编程要从娃娃抓起,所以今天我们来陪着小猪佩奇一起学「Python」
Python
今天我们先补充完函数的知识,之后开始模块的学习。关于函数的知识算上今天是第三天,大家认真地消化一下,打好基础,之后的学习才能游刃有余。
函数
1
常用操作
迭代器1
"""
迭代器不但可以作用于 for 循环,还可以被 next() 函数不断调用并返回下一个值,
直到最后抛出 StopIteration 错误表示无法继续返回下一个值
生成器 generator 都是 Iterator 对象,但 list、dict、str 虽然是Iterable,却不是 Iterator。
把 list、dict、str 等 Iterable 变成 Iterator 可以使用 iter() 函数:
可以被 next() 函数调用并不断返回下一个值的对象称为迭代器:Iterator
"""
print(isinstance([], Iterator)) # F
print(isinstance((), Iterator)) # F
print(isinstance({}, Iterator)) # F
print(isinstance("", Iterator)) # F
print(isinstance((x for x in range(10)), Iterator)) # T
l = (x for x in range(1))
print(next(l)) # 0
# print(next(l)) # StopIteration
# 转成Iterator对象
a = iter([1, 2, 3, 4, 5])
print(next(a)) # 1
print(isinstance(iter([]), Iterator)) # T
print(isinstance(iter(()), Iterator)) # T
print(isinstance(iter({}), Iterator)) # T
print(isinstance(iter(""), Iterator)) # T
装饰器2.1
# 装饰器:是一个闭包,把一个函数当做参数返回一个替代版的参数,本质上就是一个返回函数的函数
# 简单的装饰器
def fun1():
print("To be a better man!")
def outer():
print("Do right decision!")
# fun1()嵌套在outer()函数内
fun1()
outer()
装饰器2.2
# fun1()被当做参数传入outer()
def outer(fun):
def inner():
print("Do right decision!")
fun()
inner() # 内部直接调用inner()
outer(fun1)
def outer(fun):
def inner():
print("Do right decision!")
fun()
# 内部函数的名字,返回 inner 需要执行
return inner
# f 是函数 fun1 的加强版本 此时等价于 inner
f = outer(fun1)
f()
装饰器2.3
# 使用 @ 符号将装饰器应用到函数 2.4 版本出现的
def outer(func):
def inner(age):
if age < 0:
age = 0
func(age)
return inner
@outer
def say(age):
print("Mark is %d years old" % age)
# 未使用 @outer
say = outer(say)
say(-10) # 0
# 加入 @outer 后 say(-10) 等价于上面两行代码
say(-10) # 0
装饰器2.4
def outer(func):
def inner(*args, **kwargs):
print("Be different")
func(*args, **kwargs)
return inner
# 使用@符号将装饰器应用到函数
@outer
def say(name, age):
print("I'm %s,I'm %d years old" % (name, age))
# 未使用 @outer
say = outer(say)
say("Mark", 18)
# 加入 @outer 后 say("Mark", 18) 等价于上面两行代码
say("Mark", 18)
偏函数3
# 偏函数:把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单
import functools
# 转换大量的二进制字符串时
print(int("1010", base=2)) # 10
def f(s, base=2):
return int(s, base)
print(f("1010"))
# 与 10 求和
def _sum(a, b=10):
print(a+b)
_sum(1) # 11
# 把一个函数固定住,形成一个新的函数
f = functools.partial(int, base=2)
print(f("1010"))
模块
1
模块简介
概述:
目前代码比较少,写在一个文件中还体现不出什么缺点,但是随着代码量越来越多,代码就越来越难以维护。为了解决难以维护的问题,我们把很多相似功能的函数分组,分别放到不同的文件中取,这样每个文件所包含的内容相对较少,而且对于每一个文件的大致功能可以用文件名来体现。很多编程语言都是这么来组织结构的,一个.py文件就是一个模块。
优点:
1.提高了代码的可维护性
2.提高了代码的复用度,当一个模块完毕,可以被多个地方引用
3.引用其他的模块(内置模块、第三方模块、自定义模块)
4.避免函数名和变量名的冲突
2
常用操作
导入内置模块1
# 导入内置模块
import sys
"""
Python 本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用
sys模块有一个argv变量,用list存储了命令行的所有参数
argv至少有一个元素,因为第一个参数永远是该.py文件的名称
"""
# sys.argv 是一个包含命令行参数的列表
print(sys.argv)
# 自动查找所需模块的路径的列表
print(sys.path)
自定义模块2
# 一个 _module2.py 文件就是一个模块
def div(a, b):
c = a / b
print(c)
def add(a, b):
c = a + b
print(c)
def mul(a, b):
c = a * b
print(c)
def sub(a, b):
c = a - b
print(c)
导入自定义模块3.1
# 引入模块 import module1[, module2, module3, module4]
import day06_moudle._module2
day06_moudle._module2.add(1, 2) # 3
导入自定义模块3.2
# from ... import语句 作用:从模块中导入一个指定的部分到当前命名空间
from day06_moudle._module2 import add, div
# 注意:程序内容的函数可以将模块中的同名函数覆盖
add(1, 2) # 3
def add(a, b):
print(a+b+10)
add(1, 2) # 13
div(4, 2) # 2.0
导入自定义模块3.3
# 第三种最好不要多用,原因:程序内容的函数可以将模块中的同名函数覆盖
from day06_moudle._module2 import *
add(1, 2)
div(4, 2)
OS模块介绍4.1
import os # os 包含了普遍的操作系统
# 获取操作系统类型 nt-> windows posix->Linux Unix 或 Mac OS X
print(os.name) # nt
# 打印操作系统的信息(windows不支持)
print(os.uname())
# 获取操作系统中的所有环境变量
print(os.environ)
# 获取指定环境变量
print(os.environ.get("PATH"))
# 获取当前目录
print(os.curdir) # 以 . 表示当前
# 获取当前工作目录,即当前 python 脚本所在的目录
print(os.getcwd())
# 以列表的形式返回指定目录下的所有文件
print(os.listdir(r"C:\Users\Mark\PycharmProjects\Python"))
# 在当前目录下创建新目录
os.mk dir("mark")
# 删除目录
os.rm dir("mark")
# 获取文件属性
print(os.stat("file"))
# 重命名
os.rename("Mark", "Iu")
# 删除普通文件
os.remove("file1.text") 加文件后缀
# 运行shell命令
OS模块4.2
# 运行shell命令
import os
os.system("notepad") # 运行记事本
# 终止记事本运行进程
os.system("taskkill /f /im notepad.exe")
os.system("write") # 运行写字本
os.system("mspaint") # 运行画板
os.system("msconfig") # 运行系统配置
# 16分钟后关闭计算机
os.system("shutdown -s -t 1000")
os.system("shutdown -a") # 取消关闭计算机
OS.PATH 介绍4.3
# 有些方法存在于 os 模块里,还有些存在于 os.path 中
# 查看当前的绝对路径
print(os.path.abspath("./file"))
# 拼接路径
p1 = r"C:\Users\Mark\PycharmProjects\Python\test.py" # p1结束可以有斜杠 \\
# 注意:参数2里开始不要有斜杠
p2 = "Mark\Iu"
print(os.path.join(p1, p2))
# 拆分路径
print(os.path.split(p1))
# 获取扩展名
print(os.path.splitext(p1))
# 判断是否是目录
print(os.path.isdir(p1))
# 判断文件是否存在
print(os.path.isfile(p1))
# 判断目录是否存在
print(os.path.exists(p1))
# 获得文件大小(字节)
print(os.path.getsize(p1))
# 文件的目录
print(os.path.dirname(p1))
# 文件的名字
print(os.path.basename(p1))
写在后面
最后给大家推送波福利!!!如果你打算入手或着正在学习Python,欢迎加入我们一起学习。后台回复「Python」,获取到你想要的资源。同时我们组建了一个Python技术学习群,里面大佬与小白都有,有很好的学习氛围。想要进群学习的,加 Mark 微信「IMark950831」,备注「加群」,期待你的到来!
好了,今天的分享就到这了,觉得写得不错的,点赞转发支持下。
点赞、转发是一种态度。