Python 笔记
Python 笔记
记录写 Python 需要注意的问题,以及一些技巧。
在 Python 中 Everything Is Object。
Python 中的模块
- standard modules
- built-in modules
- dynamic modules
命名空间
a = 10
# a 是一个在名字空间中的名字
# 10 是一个整数对象在对象空间中的名字
- 名字空间是一个字典,他是 name-objects 的映射
- 函数对象有一个名空间叫 local namespace
- 每一个模块有自己的名空间叫 global namespace
- Python 中有一个模块叫 built-in 这个模块的 global namespace 就是 built-in namespace
名字查找顺序
Python 中遇到一个变量会按照如下的顺序进行搜索:
Local -> 当前作用域被嵌入的本地作用域 (Enclosing Locals) -> Global -> Built-In
写操作将会打断往外层 namespace 的查找过程
Python 闭包
闭包并不只是一个 Python 中的概念,在函数式编程语言中应用较为广泛。理解 Python 中的闭 包一方面是能够正确的使用闭包,另一方面可以好好体会和思考闭包的设计思想。概念介绍:首先看一下维基上对闭包的解释,在计算机科学中,闭包(英语:Closure),又称词法闭包(LexicalClosure)或函数闭包 (FunctionClosures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是自由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。简单来说就是一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。这样的一个函数我们称之为闭包。实际上闭包可以看做一种更加广义的函数概念。因为其己经不再是传统意义上定义的函数。
Python 自省
自省就是面向对象的语言所写的程序在运行时所能知道对象的类型。运行时能够获得对象的类型。相关函数如下:
- type()
- dir() 返回一个名字列表,可以通过 obj.XXX 访问的名字。方法名不在其中。
- getattr()
- hasattr()
- isinstance()
obj.__dict__ : __dict__ : a map of (name, object) pairs
Python 协程
进程和线程都面临着内核态和用户态切换的问题,协程就是用户自己控制切换的时机,不需要陷入系统的内核态.
== 和 is
Semantics of "=="
两个值相等
Semantics of "is"
两个是同一个对象
Python 对象
- id() 判断对象的地址。
- Python 小对象池,其中包括 str 或者 int 类型,Python 的编译选项可设置大小。
- NoneType None只有一份,bool 类型 True和False只有一份。
- issubclass() 检查一个类是否是另一个类的子类。
- isinstance() 是否是一个对象的实例。
Python 网络编程
- Python 使用 socket socket() 来创建关键字
- 再将套接字 ip 与 port 绑定
- 服务端调用 accept() 方法来接收客户端
Python 文件
使用 with as 语法,文件在语句结束后会被自动关闭,文件对象是可迭代的。
with open("text.txt", 'w') as textfile:
textfile.write("success")
# textfile.read(n) 读文件
Python 私有方法
- python 并不支持私有方法,为了让方法或者特征变为私有,只要在它的名字前面加上双下划线即可。
- python 中以单下划线开头的名称不会被默认导入,因此可以用于避免与其他模块的名称冲突。
Python Json
- json.dumps将 Python 对象编码为 json 字符串
- json.loads将已经编码的 json 字符串解码为 Python 对象
data = [{'a':1,'b':2,'c':3}]
jsonstr = json.dumps(data)
print jsonstr
# 对象.dumps生成 json 字符串
# json字符串.loads 生成 python 对象
Python 定义常量
"""
constant variable save in const.py
"""
class _Const(object):
class ConstError(TypeError):
pass
class ConstCaseError(ConstError):
pass
def __setattr__(self, name, value):
if name in self.__dict__:
raise self.ConstError("Can't change const.%s " % name)
if not name.isupper():
raise self.ConstCaseError('const name "%s" is not all uppercase ' % name)
self.__dict__[name] = value
import sys
sys.modules[__name__] = _Const()
使用:
import const
const.MY_CONSTANT = 1
const.MY_SECOND_CONSTANT = 2
# const.MY_CONSTANT = 1 # 抛出异常
Python 判断一个对象可迭代
通过 collections 模块的 iterable 类型进行判断
from collections import Iterable
isinstance('abc', Iterable)
Python enumerate
enumerate 函数可以把一个 list 变成(索引,元素)对,这样就可以在 for 循环中,同时迭代索引和元素本身。
for i, value in enumerate(['A', 'B', 'C']):
print(i, value)
Python 测试执行时间
from timeit import Timer
print(Timer("temp = x;x = y; y = temp","x = 2;y=3").timeit())
print("**************************************************")
print(Timer("x,y = y,x","x = 2;y=3").timeit())
Note
- 最好使用不可变参数做默认参数
- 可变对象容易缓存
- 函数的默认参数保存在函数对象中
- print 在 2.x 版本中是关键字
- 大量列表元素需要遍历可以使用生成器, 将列表解析中的 [] 换成 ()
- range() 产生一个 list,xrange()产生一个迭代器
- new.instancemethod() 会修改对象的名空间
- import as 语句进行函数的局部的重命名
- 变量和它的值是一个“不可见”的字典
- 如果知道 foo 是 Person 的实例,那么可以把 foo.greet() 看作 Person.greet(foo) 的方便简写
Python 高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数可以接收一个函数作为参数,我们就称之为高阶函数。
def add(x, y, f):
return f(x) + f(y)
map / reduce
map(function, iterable)
def f(x):
return x * x
l = map(f, [1,2,3])
print(list(l))
reduce() 函数是 functools 模块中的一个内置函数。它用于对一个可迭代对象中的元素进行累积操作,最终返回一个单个的结果。
reduce(function, iterable[, initializer])
from functools import reduce
def multiply(x, y):
return x * y
numbers = [1, 2, 3, 4, 5]
result = reduce(multiply, numbers)
print(result)
Python eval
Tips
print() # print打印不换行
# 在Python的源文件中使用中文
#-*-coding: utf-8 -*-
Python 常用的第三方库
- speedtest-cli 工具
- pillow
- requests
- chardet
- psutil
Python 反射
pass
Python 高级主题
pass
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧