参考:
推荐阅读
最近一次更新时间: 2020-9-5,更多连载请查看【python】,
文章目录
1 初步接触导入模块(math for example)
以 math
库为例,
- ceil:向下取整
- floor:向上取整
- sqrt:开方
- exp: e x e^x ex
- e:自然常数 e
- log:log 以 e 底
- pi: π \pi π
- factorial:阶乘
- gcd:最小公约数
阶乘
import math
n = 6
print(math.factorial(n))
output
720
最大公约数 / 最小公倍数
import math
a = 15
b = 50
x = math.gcd(a,b) # 求最小公约数
y = a*b//x # 根据最小公约数求最大公倍数
print(x, y)
output
5 150
- import math(导入模块 math.xxx / math.yyy )
- import math as m (对模块名进行缩写 m.xxx / m.yyy )
- from math import xxx,yyy(导入模块你所需要的功能 xxx / yyy)
- from math import *(导入模块的所有功能 xxx / yyy)
2 输入输出(input、print)
2.1 输入(input)
在框中输入kobe,并看一下输入的结果
input 默认是str类型
确保相等可以加一个int()强制把str转换为int类型
2.2 输出(print)
先看一个比较有意思的例子
n = 5
print('\n'.join('😀' * i for i in range(1, n + 1)))
output
😀
😀😀
😀😀😀
😀😀😀😀
😀😀😀😀😀
下面看看使用 print 语句写入文件
print("Hello, World!", file=open('file.txt', 'w'))
使用的时候,可以配合打印提示,比如
print("prepare to write...")
print("Hello, World!", file=open('file.txt', 'w'))
下面再看看 print 结合属性的一些灵活应用
print("Hello", end="")
print("World") # HelloWorld
print("Hello", end=" ")
print("World") # Hello World
print('words', 'with', 'commas', 'in', 'between', sep=', ') # words, with, commas, in, between
print("29", "10", "2021", sep="/") # 29/10/2021
print("name", "domain.com", sep="@") # name@domain.com
使用下划线分割过于长的数字
print(1_000_000_000) # 1000000000
print(1_234_567) # 1234567
2.2.1 %
sep表示分解符
print() 函数还可以用字符串格式化控制输出的形式,常见的格式字符如下表:
print('%o' % 20)
print('%d' % 20)
print('%x' % 20)
output
24
20
14
我们用 %s 代替要输出的内容,而后一个 %后面 你的内容则是真正输出的内容,如果有多个 %s,在最后的 % 后面要 加括号 将真正输出内容括起来。
Note:%f,%e 默认精确到小数点后6位
Note:
1)原数字宽度不够m的时候,自动左边补空格
2)#的用法为,%#0 或者%#x
%m.nf m指的是输出总宽度,小数点之后保留n位(四舍五入保存),如果总宽度超过m,按照实际显示
2.2.2 format
str.format()通过{ }来代替%,功能更强!
1){}内为关键字参数
2){}内也可由位置参数,0,1,2……表示,.format()直接写,不用,0=XXX,1=XXX
3)也可以两种方法混用,但是位置参数需要在关键字参数之前
下面是一个比较灵活的例子
'{0}{1:.2f}'.format('Pi = ', 3.1415)#:.2f限制输出的位数
结果为
'Pi = 3.14'
2.2.3 f-string
和 format 比较类似,还是比较方便的
Hello = "Hello"
World = "World"
print(f"{Hello} {World}") # 避免 + " " +
output
Hello World
2.2.4 pprint
打印比 print 更加美观
参考
一文读懂Python中print和pprint的区别
Python3内置模块pprint让打印比print更美观详解
使用
from pprint import pprint
response = [
{"status": 200, "result":[1,2,3,4,5]},
{"status": "OK", "result":["hello", "world"]},
{"status": 404, "result": "Data not found"}
]
print(response,"\n")
pprint(response)
output
[{'status': 200, 'result': [1, 2, 3, 4, 5]}, {'status': 'OK', 'result': ['hello', 'world']}, {'status': 404, 'result': 'Data not found'}]
[{'result': [1, 2, 3, 4, 5], 'status': 200},
{'result': ['hello', 'world'], 'status': 'OK'},
{'result': 'Data not found', 'status': 404}]
2.3 colorama 库,控制输出的字体样式
from colorama import Fore, Back, Style
print(Fore.YELLOW + "some yellow text")
print(Back.RED + "and with a red background")
print(Style.DIM + "and in dim text") # 变淡
print(Style.RESET_ALL)
print("back to normal now")
dim 看的不是特别明显
3 time 模块
统计代码执行时间
import time
start_time = time.time()
result = 0
for i in range(10**3):
for j in range(10**3):
result += i*j
print(result)
end_time = time.time()
total_time = end_time - start_time
print("time:",total_time)
output
249500250000
time: 0.09956932067871094
显示当前时间
import time
print(time.ctime())
output
Thu Aug 13 20:00:00 2021
4 future 模块
from __future__ import
引用未来 python 版本的功能,例如 python 2 可以使用 python3 的内容
1)print_function
from __future__ import print_function
可在 python2 的环境下(print
),超前使用 python3 的 print 函数(也即 print()
)
2)absolute_import
引用绝对路径而不是相对路径
from __future__ import absolute_import
3)division
from __future__ import division
python 2 的除法是整除( //
),python 3 除法是 /
,整除是 //
5 argparse 模块
python 内置的模块
ArgumentParser
对象和 add_argument()
方法 使用方法如下
import argparse
parser = argparse.ArgumentParser(description='Train keypoints network')
parser.add_argument('--cfg',
help='experiment configure file name',
required=True,
type=str)
args = parser.parse_args()
print(args)
required=True
了,在 terminal 中调用的时候,必须加上此项,eg python demo.py --cfg "hello"
结果为
Namespace(cfg='hello')
6 sys
可以利用 sys.getsizeof
查看数据所占内存的大小
import sys
print(sys.getsizeof(1))
print(sys.getsizeof(1.0))
print(sys.getsizeof("1"))
print(sys.getsizeof("1.0"))
print(sys.getsizeof([]))
print(sys.getsizeof({}))
print(sys.getsizeof(set()))
output
28
24
50
52
56
64
216
7 enum
枚举类型,先简单的感受一下
from enum import Enum
Season = Enum('Season', "spring summer autumn winter")
print(type(Season))
print(type(Season.spring))
print(type(Season.spring.name))
print(Season.spring.name)
print(type(Season.spring.value))
print(Season.spring.value)
print(Season._member_names_)
output
<class 'enum.EnumMeta'>
<enum 'Season'>
<class 'str'>
spring
<class 'int'>
1
['spring', 'summer', 'autumn', 'winter']
可以以字典的方式赋值枚举变量
from enum import Enum
Season = Enum('Season', {"spring":'windy',"summer":'hot'})
print(Season.spring.value)
output
windy
下面看看更 DIY 的方式
from enum import Enum
class Season(Enum):
spring = 'windy'
summer = 'hot'
autumn = 'cool'
winter = 'cold'
print(Season._member_names_) # 全部枚举变量列表
print("\n")
print(Season._value2member_map_) # 字典键是枚举值,值是枚举变量
print("\n")
print(Season.__members__.items()) # 全部的枚举值
print("\n")
for v in Season:
print(v.name, v.value)
output
['spring', 'summer', 'autumn', 'winter']
{'windy': <Season.spring: 'windy'>, 'hot': <Season.summer: 'hot'>, 'cool': <Season.autumn: 'cool'>, 'cold': <Season.winter: 'cold'>}
dict_items([('spring', <Season.spring: 'windy'>), ('summer', <Season.summer: 'hot'>), ('autumn', <Season.autumn: 'cool'>), ('winter', <Season.winter: 'cold'>)])
spring windy
summer hot
autumn cool
winter cold
8 tqdm
tqdm 就能非常完美的支持和解决这些问题,可以实时输出处理进度而且占用的 CPU 资源非常少,支持 windows、Linux、mac 等系统,支持循环处理、多进程、递归处理、还可以结合 linux 的命令来查看处理情况,等进度展示。
安装
pip install tqdm
或者
conda install -c conda-forge tqdm
对于可以迭代的对象都可以使用下面这种方式,来实现可视化进度,非常方便
from tqdm import tqdm
import time
for i in tqdm(range(100)):
time.sleep(0.1)
pass
tqdm(range()) 可以替换成 trange()
from tqdm import tqdm,trange
import time
for i in trange(100):
time.sleep(0.1)
pass
手动设置处理的进度
from tqdm import tqdm
import time
# total参数设置进度条的总长度
with tqdm(total=100) as pbar:
for i in range(100):
time.sleep(0.1)
# 每次更新进度条的长度
pbar.update(10)
不用 with 也可以
from tqdm import tqdm
import time
#total参数设置进度条的总长度
pbar = tqdm(total=100)
for i in range(100):
time.sleep(0.05)
#每次更新进度条的长度
pbar.update(10)
#关闭占用的资源
pbar.close()
多层循环
from tqdm import tqdm
import time
for i in tqdm(range(20), ascii=True,desc="1st loop"):
for j in tqdm(range(10), ascii=True,desc="2nd loop"):
time.sleep(0.01)
附录
collections
字符元素组成判定
from collections import Counter
a = "3abcd3"
b = "d3bc3a"
print(Counter(a) == Counter(b))
output
True
打印模块安装位置
import pandas
print(pandas) # <module 'pandas' from '/usr/local/lib/python3.8/site-packages/pandas/__init__.py'>
使用绝对/相对路径导入包
绝对导入可以使用 import <>
或 from <> import <>
语法,但相对导入只能使用 from <> import <>
形式
import 后面不能直接跟 ..
再看下例子加深对 import 的理解
python_package_dir_example = '''
parent/
__init__.py
one/
__init__.py
one/
__init__.py
two/
__init__.py
three/
__init__.py
上述目录结构在 import parent.one.one
时,会加载 parent.one
中的 __init__
Note: 更多连载请查看【python】