【python】import input output(3)

在这里插入图片描述

参考:

推荐阅读


最近一次更新时间: 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

在这里插入图片描述
参考:__future__模块–python学习记录(一)

3)division

from __future__ import division

python 2 的除法是整除( // ),python 3 除法是 / ,整除是 //

5 argparse 模块

python 内置的模块
在这里插入图片描述

参考 argparse — 命令行选项、参数和子命令解析器

在这里插入图片描述
在这里插入图片描述

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

来自 详细介绍Python进度条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】

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值