Python的一些小操作、常用库及函数(持续更新)

列表操作

控制多个循环变量

for i, j in zip(list1, list2):

带条件判断的列表生成式

t = [1 if i%2==0 else 0 for i in range(10)]

必须带else分支,否则这种情况下的列表项就没值了……就算是赋予空置,也要写个else None上去……

一行写不下时

列表操作的时候,一行写不下?假如说下面代码太长了,[2]不得不写在下一行:

a = [1] +
    [2]

但是发现报错了,这个时候应该:

a = [1] + \
    [2]

相当于英文写作时单词没写完但该行没位置了,使用连字符一样。

字符串

s = 'code'  
print(s[-1])
print(s[-3:-1])

对于第二行代码,输出为'e',即输出倒数第1位,当i>0,s[-i]表示倒数第i位。

对于第三行代码,输出为'od',即输出倒数第3位到倒数第2位,当a>b>0,s[-a:-b]表示倒数第a位到倒数第b+1位。

 

PyCharm调试

在相应的行号后面单击即可设置断点。

Step Into(F7):执行下一步,遇到函数会单步进入。

Step Over(F8):执行下一步,遇到函数会将其整个执行完,不会单步进入。

Step Out(Shift+F8):若执行位置所处函数内无断点,会执行完函数剩余部分并跳出函数,若有则跳到断点。

含参数调试

若要调试通过控制台传入参数的程序,则:

Python的一些小操作、常用库及函数(持续更新)_第1张图片

选择相应程序,在Configuration下的Parameters填入相关参数即可,例如:

Python的一些小操作、常用库及函数(持续更新)_第2张图片

 

命令行参数

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-n')
args = parser.parse_args()

以上为格式,除了第三行其他照抄就行,第三行表示使用命令行调用该程序时可添加一个参数“-n”。

每个parser.add_argument语句定义一个命令行参数,接下来详解该语句:

参数的基本定义

parser.add_argument('name')
parser.add_argument('-name')
parser.add_argument('--name')
parser.add_argument('-n', '--name')

第一行,添加一个命令行参数name,这个参数没有像前面以“-”或“--”开头,则说明这个参数在命令行中是必须输入的。

第二行和第三行的以“-”或“--”开头,说明这些参数在命令行中可输也可不输,如果要输,则通过参数名指定(前面的“-”或“--”不能省)。第一行的写法则不需要。如果有多个需要指定的变量,前后顺序无所谓。

第四行原参数为“--name”,但同时也为其定义了一个简版,在命令行中通过“-n”和“--name”都可以传值。注意按照格式,简版以“-”开头,放前面,完整的以“--”开头,放后面。

这些通过命令行传入的值如何使用呢?通过args.参数名,例如上面四条,无论前面几个“-”,都通过args.name访问(第四条语句,简版完整版同在,则以完整版参数名来访问),数据类型默认都为string。

除了以上的基本定义,parser.add_argument还可通过一些属性实现更多功能:

help

调用了argparse,命令行调用的时候会自带一个-h(完整:--help),功能类似于cmd中的help命令,显示所有自定义参数的描述,这个描述可通过help属性自定义:

parser.add_argument('-n', '--name', help='Tell us your name')

Python的一些小操作、常用库及函数(持续更新)_第3张图片

type及default

type指定传入值的数据类型,默认为string。default为未通过命令行赋值的变量赋以默认值。

parser.add_argument('-number', default=200, type=int)

对于那些又无默认值,又未通过命令行赋值的变量,其值一般为None。

choices

为传入的值进行规范,传入的值必须为choices列表规定的合法值,否则会报错。

parser.add_argument('-number', choices=[1,2,3], type=int)

required

当required=True时,说明定义的变量必须要通过命令行传值。(而且也要通过“-number”指定)

parser.add_argument('-number', required=True, type=int)

nargs

如果列表要通过命令行传值,可通过nargs指定一次传入值的个数,如果个数不确定,可以写为:

parser.add_argument('-list', nargs='+')

传入值至少为一个。如果nargs='*',表示传入值至少0个,若nargs='?',则传入值为0或1个。

action

action有两个值:store_true和store_false,该参数起到的是“开关”的作用,不调用该参数则为默认值,一旦有“调用”这个action,值就变动为action中指定的值。

parser.add_argument('--b', action='store_true', default=False)

输出b,可以看到:

Python的一些小操作、常用库及函数(持续更新)_第4张图片

parse_known_args

该方法是ArgumentParser类实例化后的对象的方法,可用于多次传参。假如现在我要获取男生的身高和女生的体重,在输入的时候,第一项是性别,第二项则取决于第一项的输入,则:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-g','--gender')
exist_parameters, unparsed = parser.parse_known_args()
if exist_parameters.__getattribute__('gender') == 'male':
    parser.add_argument('-t', '--tall')
else:
    parser.add_argument('-w', '--weight')
args = parser.parse_args()

输入:python a.py -g male -t 173

通过parse_known_args,已经指明的gender和对应值“male”被存入了exist_parameters,而因为-t还未被指派,暂时存入unparsed(以列表形式:['-t', '173'])

对于exist_parameters,使用__getattribute__获取到其内部已指派好的参数值,即可知晓下一步引入何种参数。

如果在unparsed中的值直到最后(指定义args变量这一步)也没有通过add_argument进行指派,则会报错。

 

其他

查看对象所占用的内存空间

import sys
k = [1, 2, 3]
print(sys.getsizeof(k))

以上代码输出88,表示k占用88个字节。

有意思的地方在于:

import sys
list1 = range(1000)
list2 = [i for i in range(1000)]
print(sys.getsizeof(list1))    #48
print(sys.getsizeof(list2))    #9024

用range函数返回类似list的类,相比于直接生成一个列表,会节省非常多空间。

布尔值的一些冷知识

以下值会被python认为是False:

None    0    ""    ''    ()    []    {}

编译器会隐式转换这些值。虽然都认作False,但它们之间是不相等的,甚至直接与False相比,它们也是不相等的:

print([]==())
print([]==False)

输出都为False。

下载

例如,从网络上下载一张图片:

import urllib.request
url = 'http://www.ZergWang.com/789.png'
urllib.request.urlretrieve(url, 'zergwang.png')

将多张图片拼接成PDF

使用fpdf库:

from fpdf import FPDF
from PIL import Image

pages = 10
img = Image.open('0.png')
width, height = img.size[0], img.size[1]
newPDF = FPDF(unit = "pt", format = [width, height])
for i in range(pages):
    newPDF.add_page()
    newPDF.image('%s.png'%i, 0, 0)
newPDF.output('example.pdf', 'F')

 

你可能感兴趣的:(Language)