note-python随记
模块
python struct
name == 'main'
__name__
是当前模块名,当模块被直接运行时模块名为__main__
。意思是,当模块被直接运行时,下面的代码块将被运行,当模块是被导入时,代码块不被运行
例子
#综合案例 - 猜丁壳
from random import randint
hands = ("Rock","Scissors","Paper")
s_hand = input("input(O:Rock,1:Scissors,2:Paper):")
if s_hand not in ['0', '1', '2']:
print("not proper choice!exit!")
exit()
choice = int(s_hand)
computer = randint(0,2)
print("you:",hands[choice]," ; computer:",hands[computer])
if choice == computer:
print("draw!")
else:
if choice == 0:
if computer == 1:
print("you win")
else:
print("you lose")
elif choice == 1:
if computer == 0:
print("you lose")
else:
print("you win")
else:
if computer == 0:
print("you win")
elif computer == 1:
print("you lose")
摇骰子
1
-
作为电传打字机来说,
-
-
换行 对应字节
0x0A
Line-Feed
- 意思是水平不动、垂直向上喂纸
- 所以是
feed
-
回车 对应字节
0x0D
Carriage-Return
- 让上图可移动的打印头(好像可移动的四轮马车 Carriage)
- 垂直不动、水平
回
到纸张左侧 - 所以是
Return
-
-
当 CR 和 LF 组合使用时
-
- 则会将打印纸张上移一行
- 且下一个打字位置将回到该行的最左侧
- 也就是我们今天所理解的换行操作
-
操作系统 Unix
出现
-
受限于内存和软盘空间的不足
-
设计者决定采用单个字符来表示换行符
- 使
\n
单字符替代\r\n
,默认\n
=\r\n
- C 语言在编程的时候继续了这个惯例
- 他既干了换行
\n
的活,又干了回车\r
的活 - Unix-Like 都是如此,包括 BSD、Linux
- 使
-
Commondore64 一度很流行
-
同样处于节省空间的目的
-
使用
\r
代替\r\n
批量替换
:%s/\\$/\\\\/gc
-
:
表示进入命令行模式执行命令 -
%
表示从第一行到最后一行全范围执行命令 -
s
表示substitute
查找替换 -
查找内容和替换内容用
/
隔开
-
查找内容是
\\$
\\$
行结尾位置的反斜杠- 反斜杠本身是转义字符
- 表示反斜杠这个字符需要两个反斜杠
\\
代表一个反斜杠$
表示航结尾\\$
整体表示查找的是紧挨着行结尾的反斜杠
-
替换内容是
\\\\
\\
代表一个反斜杠\\\\
代表两个反斜杠
-
-
gc
g
lobal 行中所有都查找
c
onfirm 逐一确认
Python locals() 函数
以字典类型返回当前位置的全部局部变量。
- 查询本地变量
Python input() 函数
input([prompt])
- prompt: 提示信息
Python type() 函数
type(object)
type(name, bases, dict)
- name -- 类的名称。
- bases -- 基类的元组。
- dict -- 字典,类内定义的命名空间变量。
输入自定义模块
python try except
https://www.runoob.com/python/python-exceptions.html
面向过程程序设计方法
Python hex() 函数
hex() 函数用于将10进制整数转换成16进制,以字符串形式表示。
Python oct() 函数
oct() 函数将一个整数转换成 8 进制字符串。
Python bin() 函数
bin() 返回一个整数 int 或者长整数 long int 的二进制表示。
Python ord() 函数
ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
Python eval() 函数
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
eval(expression[, globals[, locals]])
参数
- expression -- 表达式。
- globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
- locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
https://www.runoob.com/python/python-func-eval.html
随机数生成字母
- random.randint(0,3)
- 生成[0,3]区间中的数字
- random.randint(0,3) + 0x41
- 生成[0x41,0x44]区间中的数字
- 也就是 A 到 D 的 ascii 码区间
- chr(random.randint(0,3) + 0x41)
- 把[0x41,0x44]区间中的数字
- 转化为 A-D 的字符
Python chr() 函数
chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
常量
程序员约定俗成用变量名全部大写代表常量
python虽然本质上是一个变量,但却是一个不会被修改的变量,我们把它看做常量。
Python divmod() 函数
python divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。
re 模块
- re 是正则表达式模块
Python pow() 函数
pow() 方法返回 xy(x 的 y 次方) 的值。
以下是 math 模块 pow() 方法的语法:
import math
math.pow( x, y )
内置的 pow() 方法
pow(x, y[, z])
函数是计算 x 的 y 次方,如果 z 在存在,则再对结果进行取模,其结果等效于 pow(x,y) %z。
pow(x,y,z) 当 z 这个参数不存在时 x,y 不限制是否为 float 类型, 而当使用第三个参数的时候要保证前两个参数只能为整数。
注意:pow() 通过内置的方法直接调用,内置方法会把参数作为整型,而 math 模块则会把参数转换为 float。
运算符号
** 乘方运算
// 返回商的整数部分(向下取整)
/ 除
% 返回除法的余数
* 乘
增强运算符列表
- +=
- −=
- *=
- /=
- //=
- %=
- **=
就逻辑运算符来说
- not 最高
- and 居中
- or 最低
Python sum() 函数
sum() 方法对序列进行求和计算。
语法
以下是 sum() 方法的语法:
sum(iterable[, start])
参数
- iterable -- 可迭代对象,如:列表、元组、集合。
- start -- 指定相加的参数,如果没有设置这个值,默认为0
Python log10() 函数
log10() 方法返回以10为基数的x对数,x>0。
以下是 log10() 方法的语法:
import math
math.log10( x )
注意:log10()是不能直接访问的,需要导入 math 模块,通过静态对象调用该方法。
python 中数值类型总结
类型名称 | 描述 | 是否可变类型 | 举例 |
---|---|---|---|
整型 | int | 否 | 123 |
浮点型 | float | 否 | 1.2 、1e5 |
分数类型 | Fraction | 是 | fractions.Fraction(1, 10) |
精确十进制 | Decimal | 是 | decimal.Decimal("0.1") |
复数 | complex | 是 | (1,-1j) |
读取文件
f = open('data.txt')
读取内容
data = f.read()
读取文件10个字符,1个中文为1个字符
data1= f.read(10)
data2= f.read(10) #继续上一次读取结束位置继续读取
name=f.name #读取文件名称
data3=f.readline() #读取一行内容
data4=f.readline(10) #读取文件10个字符
data5=f.readlines() #一次性读取整个文件内容,并按行返回到list
f.flush() #将缓冲中的内容写入磁盘
f.tell() #显示当前文件的指针所在位置
f.close() #关闭打开的文件
f.seek() #对文件进行指针偏移操作,有三个模式,
seek(0,0) 默认移动到文件开头或简写成seek(0)
seek(x,1) 表示从当前指针位置向后移x(正数)个字节,如果x是负数,则是当前位置向前移动x个字节
seek(x,2) 表示从文件末尾向前后移x(正数)个字节,如果x负数,则是从末尾向前移动x个字节
Python replace()方法
Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
replace()方法语法:
str.replace(old, new[, max])
sys.argv
Python 中也可以使用 sys 的 sys.argv 来获取命令行参数:
- sys.argv 是命令行参数列表。
- len(sys.argv) 是命令行参数个数。
注:sys.argv[0] 表示脚本名。
Python File tell() 方法
tell() 方法返回文件的当前位置,即文件指针当前位置。
f.tell()
文件锁fcntl
- LOCK_SH: 表示要创建一个共享锁,在任意时间内,一个文件的共享锁可以被多个进程拥有
- LOCK_EX: 表示创建一个独享锁,在任意时间内,一个文件的排他锁只能被一个进程拥有
- LOCK_UN: 表示删除该进程创建的锁(解锁)
- LOCK_MAND:它主要是用于共享模式强制锁,它可以与 LOCK_READ 或者 LOCK_WRITE 联合起来使用,从而 表示是否允许并发的读操作或者并发的写操作(尽管在 flock() 的手册页中没有介绍 LOCK_MAND,但是阅读内核源代码就会发现,这在内核中已经实现了)
- LOCK_NB: 如果指定此参数,函数不能获得文件锁就立即返回,否则,函数会等待获得文件锁。LOCK_NB可以同LOCK_SH或LOCK_EX进行按位或(|)运算操作。
**注意点**
- 对于文件的 close() 操作会使文件锁失效;
- 同理,进程结束后文件锁失效;
- flock() 的 LOCK_EX是“劝告锁”,系统内核不会强制检查锁的状态,需要在代码中进行文件操作的地方显式检查才能生效。
- 在给文件加锁之前,一定要保证文件以相应的访问模式打开,例如:
要对一个文件加上共享锁,一定要首先按读模式打开文件;
若要给文件加上排他锁,则首先要按写模式打开对应文件;
若想加两种锁,则需要按读写模式打开.
Python File fileno() 方法
fileno() 方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作。
Python open() 函数
不同模式打开文件的完全列表:
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(不推荐)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
Python decode()方法
Python decode() 方法以 encoding 指定的编码格式解码字符串。默认编码为字符串编码。
decode()方法语法:
str.decode(encoding='UTF-8',errors='strict')
参数
- encoding -- 要使用的编码,如"UTF-8"。
- errors -- 设置不同错误的处理方案。默认为 'strict',意为编码错误引起一个UnicodeError。 其他可能得值有 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及通过 codecs.register_error() 注册的任何值。
os.system方法
https://blog.csdn.net/ningyanggege/article/details/90677243
python with关键字
with表达式其实是try-finally的简写形式。
https://www.jianshu.com/p/5b01fb36fd4c
Python List append()方法
append() 方法用于在列表末尾添加新的对象。
Python List remove()方法
remove() 函数用于移除列表中某个值的第一个匹配项。
Python 列表 clear() 方法
从 列表删除所有元素:
Python List len()方法
len() 方法返回列表元素个数。
len()方法语法:
len(list)
Python List count()方法
count() 方法用于统计某个元素在列表中出现的次数。
count()方法语法:
list.count(obj)
- obj -- 列表中统计的对象。
Python count()方法
Python count() 方法用于统计字符串里某个字符或子字符串出现的次数。可选参数为在字符串搜索的开始与结束位置。
count()方法语法:
str.count(sub, start= 0,end=len(string))
参数
- sub -- 搜索的子字符串
- start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
- end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
Python List extend()方法
extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
extend()方法语法:
list.extend(seq)
- seq -- 元素列表。
区别
- 操作对象不同
- append 添加的是具体的元素
- extend 是追加另一个列表
- 我们再试试乘法运算
index find
Python List reverse()方法
reverse() 函数用于反向列表中元素。
reverse()方法语法:
list.reverse()
Python3 reversed 函数
描述
reversed 函数返回一个反转的迭代器。
语法
以下是 reversed 的语法:
reversed(seq)
参数
- seq -- 要转换的序列,可以是 tuple, string, list 或 range。
返回值
返回一个反转的迭代器。
Python3 List sort()方法
sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
sort()方法语法:
list.sort( key=None, reverse=False)
参数
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
Python3 sorted() 函数
sorted() 函数对所有可迭代的对象进行排序操作。
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
Python shuffle() 函数
shuffle() 方法将序列的所有元素随机排序。
以下是 shuffle() 方法的语法:
import random
random.shuffle (lst )
注意:shuffle()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。
Python List insert()方法
insert() 函数用于将指定对象插入列表的指定位置。
insert()方法语法:
list.insert(index, obj)
参数
- index -- 对象 obj 需要插入的索引位置。
- obj -- 要插入列表中的对象。
Python List pop()方法
pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
pop()方法语法:
list.pop([index=-1])
pop()在 set、list 中的不同
- list 是有序的,弹出的是最后一个
- set 是无序的,随机弹出一个
Python zip() 函数
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。
如果需要了解 Python3 的应用,可以参考 Python3 zip()。
zip 语法:
zip([iterable, ...])
参数说明:
- iterabl -- 一个或多个迭代器;
Python 直接赋值、浅拷贝和深度拷贝解析
https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html
元组
逗号分割开的数值默认也是元组
只支持这两个函数
- count
- index
搜索值
开始位置 start
结束位置 stop
Python Set add()方法
add() 方法用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。
add()方法语法:
set.add(elmnt)
Python Set discard() 方法
discard() 方法用于移除指定的集合元素。
该方法不同于 remove()
方法,因为 remove()
方法在移除一个不存在的元素时会发生错误,而 discard()
方法不会。
discard() 方法语法:
set.discard(value)
Python frozenset() 函数
frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
frozenset() 函数语法:
class frozenset([iterable])
Python Set intersection() 方法
intersection() 方法用于返回两个或更多集合中都包含的元素,即交集。
intersection() 方法语法:
set.intersection(set1, set2 ... etc)
参数
- set1 -- 必需,要查找相同元素的集合
- set2 -- 可选,其他要查找相同元素的集合,可以多个,多个使用逗号 , 隔开
Python Set intersection_update() 方法
intersection_update() 方法语法:
set.intersection_update(set1, set2 ... etc)
参数
- set1 -- 必需,要查找相同元素的集合
- set2 -- 可选,其他要查找相同元素的集合,可以多个,多个使用逗号 , 隔开
Python Set union() 方法
union() 方法返回两个集合的并集,即包含了所有集合的元素,重复的元素只会出现一次。
union() 方法语法:
set.union(set1, set2...)
参数
- set1 -- 必需,合并的目标集合
- set2 -- 可选,其他要合并的集合,可以多个,多个使用逗号 , 隔开。
Python Set update() 方法
update() 方法用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。
update() 方法语法:
set.update(set)
参数
- set -- 必需,可以是元素或集合
Python Set difference() 方法
difference() 方法用于返回集合的差集,即返回的集合元素包含在第一个集合中,但不包含在第二个集合(方法的参数)中。
difference() 方法语法:
set.difference(set)
参数
- set -- 必需,用于计算差集的集合
Python Set difference_update() 方法
difference_update() 方法用于移除两个集合中都存在的元素。
difference_update()
方法与 difference()
方法的区别在于 difference()
方法返回一个移除相同元素的新集合,而 difference_update()
方法是直接在原来的集合中移除元素,没有返回值。
difference_update() 方法语法:
set.difference_update(set)
参数
- set -- 必需,用于计算差集的集合
Python Set symmetric_difference() 方法
symmetric_difference() 方法返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。
symmetric_difference() 方法语法:
set.symmetric_difference(set)
参数
- set -- 集合
Python Set symmetric_difference_update() 方法
symmetric_difference_update() 方法移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
symmetric_difference_update() 方法语法:
set.symmetric_difference_update(set)
参数
- set -- 要检测的集合
Python Set isdisjoint() 方法
isdisjoint() 方法用于判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。。
语法
isdisjoint() 方法语法:
set.isdisjoint(set)
参数
- set -- 必需,要比较的集合
返回值
返回布尔值,如果不包含返回 True,否则返回 False。
Python Set issubset() 方法
issubset() 方法用于判断集合的所有元素是否都包含在指定集合中,如果是则返回 True,否则返回 False。
语法
issubset() 方法语法:
set.issubset(set)
参数
- set -- 必需,要比查找的集合
返回值
返回布尔值,如果都包含返回 True,否则返回 False。
Python 字典(Dictionary) setdefault()方法
Python 字典 setdefault() 函数和 get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
setdefault() 方法语法:
dict.setdefault(key, default=None)
参数
- key -- 查找的键值。
- default -- 键不存在时,设置的默认键值。
Python 字典(Dictionary) items()方法
Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。
语法
items()方法语法:
dict.items()
python pickle用法
https://blog.csdn.net/weixin_36115496/article/details/114912062
is
- is 判断是否相等
- 具体用 == 还是 is 和变量类型相关
- int、float、str 之类的相等判断最好用 == 和 !=
- 容器类对象的比较可以灵活运用 is 或者 ==
- is 为 True 代表两个东西 id 相等
- 或者说用的是同一个盒子
- 在内存中占的是同一块空间
Python isinstance() 函数
描述
isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
isinstance() 与 type() 区别:
- type() 不会认为子类是一种父类类型,不考虑继承关系。
- isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()。
语法
以下是 isinstance() 方法的语法:
isinstance(object, classinfo)
参数
- object -- 实例对象。
- classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。
返回值
如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False
Python enumerate() 函数
Python fractions 模块
https://www.runoob.com/note/24857
python中inf
https://blog.csdn.net/jeremyjone/article/details/80503488
NaN
Python strip()方法
Python rstrip()方法
time
# 格式化成2016-03-20 11:45:39形式
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
python中时间日期格式化符号:
- %y 两位数的年份表示(00-99)
- %Y 四位数的年份表示(000-9999)
- %m 月份(01-12)
- %d 月内中的一天(0-31)
- %H 24小时制小时数(0-23)
- %I 12小时制小时数(01-12)
- %M 分钟数(00-59)
- %S 秒(00-59)
- %a 本地简化星期名称
- %A 本地完整星期名称
- %b 本地简化的月份名称
- %B 本地完整的月份名称
- %c 本地相应的日期表示和时间表示
- %j 年内的一天(001-366)
- %p 本地A.M.或P.M.的等价符
- %U 一年中的星期数(00-53)星期天为星期的开始
- %w 星期(0-6),星期天为星期的开始
- %W 一年中的星期数(00-53)星期一为星期的开始
- %x 本地相应的日期表示
- %X 本地相应的时间表示
- %Z 当前时区的名称
- %% %号本身
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理