python相关的一些小便条
1.关于 No module named 'PIL'
如果是报错这个,不能直接 pip install PIL,需要装下面的
pip install pillow
2.关于No module named 'qcloud_cos'
这个是腾讯云存储的组件
pip install -U cos-python-sdk-v5
3.关于文件命名
如果文件命名跟命令冲突,会有可能导致命令的不执行
4.如果需要使用__init__.py文件,在项目目录下一般是无效的
在项目根目录下,新建__init__.py 文件可以生成python包,
但是在init文件里命名的参数,也需要 from . import 引入。
5.在使用多线程时,传入元组参数时,需要带上逗号(传入单个参数时),不然会报参数个数的错误。
def main(): t1 = threading.Thread(target=test1,args=(g_nums,)) # 加上要传递的参数,元组类型
附带有关多线程以字典形式传参的相关的知识
import threading def eat(name, number): print("eating :%s number :%d" % (name, number)) def watch(name, type): print("watch : %s type:%s" % (name, type)) if __name__ == '__main__': eat_thread = threading.Thread(target=eat, kwargs={"name": "爆米花", "number": 1}) watch_thread = threading.Thread(target=watch, kwargs={"name": "电影", "type": "科幻"}) eat_thread.start() watch_thread.start()
参考至这位博主:去看看
6. 在使用requests时 post json数据, 没有payload,加上下面代码就有了
data = { "id": id, 'username': name } data=json.dumps(data) #这一步很重要,要用json dumps 转一下 requests.post( url, data=data, headers=headers, verify=False )
7. 使用python打开浏览器
其中除了第三种不是以打开文件夹的方式打开的。
#1system方法 import os os.system(r'C:\"Program Files (x86)"\"Google"\"Chrome"\"Application"\chrome.exe') #2.tartfile方法 import os os.startfile("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe") #3.WEBBROWER方法 import webbrowser webbrowser.open("http://www.baidu.com") #4.win32api import win32api win32api.ShellExecute(0, 'open', 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe', '', '', 1
8. 当生成密钥,或者token 可以使用 secrets ,需要python3.6以上
""" A secret key that will be used for securely signing the session cookie and can be used for any other security related needs by extensions or your application. It should be a long random bytes or str. For example, copy the output of this to your config: $ python -c 'import secrets; print(secrets.token_hex())' """ import secrets print(secrets.token_hex())
9. 有关flask model 账号密码加密保存
from application import db from application.models.common import GeneralModel from werkzeug.security import generate_password_hash, check_password_hash class User(db.Model, GeneralModel): __tablename__ = 't_admin' # 设置表名, 表名默认为类名小写 name = db.Column('username', db.String(20), unique=True) # 设置字段名 和 唯一约束 account = db.Column('account', db.String(20), unique=True, nullable=False) # 设置字段名 和 唯一约束 password_hash = db.Column(db.String(255), nullable=False) @property def password(self): raise AttributeError("密码不允许读取") # 转换密码为hash存入数据库 @password.setter def password(self, password): self.password_hash = generate_password_hash(password) # 检查密码 def check_password_hash(self, password): return check_password_hash(self.password_hash, password)
10 查看模组与本地文件名重名bug
注意 import 模组后 下面事本地文件报错。
11 enumerate()是python的内置函数、适用于python2.x和python3.x
enumerate在字典上是枚举、列举的意思
enumerate参数为可遍历/可迭代的对象(如列表、字符串)
enumerate多用于在for循环中得到计数,利用它可以同时获得索引和值,即需要index和value值的时候可以使用enumerate
12 有关计算程序运行时间
1秒 = 10分秒;1分秒 = 10厘秒;1厘秒 = 10 毫秒 ;1 毫秒 = 1000微秒;1微秒 = 1000纳秒;1纳秒 = 1000皮秒
python 计算时间得组件是time, 有三种计算方式。
详细可参考这篇博客:去看看
import time # 常用计算,精确到小数点一位,单位是秒 s = time.time() for i in range(10000): pass e = time.time() print(e - s) # 精确计算,小数位后很多位,单位是秒 s = time.perf_counter() for i in range(10000): pass e = time.perf_counter() print(e - s) # 纳秒计算,整数,单位是纳秒 s = time.perf_counter_ns() for i in range(10000): pass e = time.perf_counter_ns() print(e - s)
结果
13 python 的复数类型
a+bj, a为实数,b为虚数部
有关复数的描述可查看这里:去看看
14 python 取余数
x%y 获取x除y的余数
x//y 获取x除y的整数
x**y x的y次幂
python 所有的运算符,都可以使用末尾等号连接
x %= y 等同于 x = x % y
x **= y 等同于 x = x ** y
15 python的字符串以Unicode编码存储,字符串英文字符和中文字符都计作1个字符。
16 python元组判断大小原则
元组之间的大小比较遵循以下规则:
-
如果两个元组的元素完全相同,则认为这两个元组相等。
-
如果两个元组的元素不全相同,则比较它们的第一个元素,第一个元素不相等的情况下,元组比较大小依据元素的ASCII值。
-
如果两个元组的第一个元素相同,则比较第二个元素,以此类推,直到比较出不同的元素或比较到最后一个元素。
17 .对复数取平方根,会生成复数
18 python 的三元运算
max_num
=
num1
if
num1 >
=
num2
else
num2
19 python 函数的参数为列表时,会出现列表被保存现象
产生上述现象的原因是:默认参数为可变类型时,如果多次使用默认参数来调用函数,该参数的状态是保持不变的,因为参数的默认值会且仅会在运行def
语句时被初始化和保存一次,而不会在每次函数调用时都发生一次。
参考地址:去看看
实验代码
def func(ls=[]): ls.append(1) return ls a = func() b= func() print(a, b)
它并非是期望的,[1] [1], 因为ls会被指向同一地址。
20 {} 0.0 ‘’ 都是属于False
21 writelines 写入列表内容,不会自动换行。相当于 write, 接收list输入。
ls = ['as', '666', 'll'] f.writelines(ls)
22 idle python 怎么查看源文件
在shell 里面可以使用help方法查看