帮助

dir(c)

查看 c 对象所具有的方法

1
2
>>> c='hello'
>>> dir(c)

help()

查看某个对象的某个方法的帮助信息

1
help(c.split)

运算符

Arithmetic operators

+-* /: Float division, 结果为浮点数。 //:Integer division, 舍去小数,结果为正数。 **: 幂运算

Comparison operators

返回值: TrueFalse

<, >, <=, >=, !=, ==

Logical operators

逻辑运算符(逻辑与,或,非): andornot

Bitwise operators

位运算操作符(按位与,或,取反,异或, 左移,右移): &, |, ~, ^, <<, >>

Assignment operators

每个算数运算符,位运算符与等号分别结合,进行运算赋值操作。 举例: =+=&=

Special operators

Identity operators

Two variables that are equal does not imply that they are identical.

is: True if the operands are identical (refer to the same object, the same memory section) a is bid(a) == id(b) 一个意思

is not: True if the operands are not identical (do not refer to the same object)

Membership operators

in: True if value/variable is found in the sequence

not in: True if value/variable is not found in the sequence

作用:

  1. 检查一个值是否在一个序列(list,range,string etc.)中出现,如果包含,就返回 True,否则返回 False

  2. 通过 for 循环的序列进行迭代

name 属性

  • 每一个后缀为 .py 的文件都被视为一个 Python 模块,可以被其他 Python 程序调用。
  • 每一个 Python 脚本在运行时,都有一个 __name_属性,通过它可以识别程序的使用方式,即:程序是在作为模块被导入,还是在独立运行。
  • 如果程序是在作为模块被导入,那么 __name_ 属性的值就自动设置为模块名,如果脚本是在独立运行,那么 __name_ 属性的值会被自动设置为字符串 “ __name_

循环

在程序开发中,有三种流程方式:顺序、分支、循环。

for 循环

通过 range() 生成连续数列

1
for  i in range(1,5)

range(start, stop, step)

Parameter Description
start Optional. An integer number specifying at which position to start. Default is 0
stop Required. An integer number specifying at which position to end.
step Optional. An integer number specifying the incrementation. Default is 1

知识点:

  1. range 的 step 参数
  2. 切片超出范围不报错

range 逆序

  1. range(5, -1, -1) -- 正确,高效 It may be less intuitive but as the comments mention, this is more efficient and the right usage of range for reversed list.

  2. reversed(range(10)) -- 最直接 如果想要将其变为列表的话,进行一下强制类型转换即可 list(reversed(range(10))

  3. range(6)[::-1] 切片逆序

函数

  1. def 是英文 define 的缩写
  2. 函数名称应该能表达函数封装代码的功能,方便后续调用
    • 可以由字母、数字和下划线组成
    • 不能以数字开头
    • 不能与关键字重复

注意: 不能将函数调用放在函数定义的上方,否则控制台会提示 NameError: name "xxx" is not defined 因为在使用函数名调用函数之前,必须要保证 Python 已经知道函数的存在。

函数注释

在函数下方使用多行注释(三个引号) 来进行注释。

注意:根据 Python 官方代码格式要求(PEP8): 因为函数体相对比较独立,函数定义的上方,应该和其他代码 ( 包括注释 ) 保留两个空行。

技巧:PyCharm 中将鼠标放到函数定义的名字那里,然后出现提示,我们 insert documentation stirng stub, 格式如下,然后当我们把光标放到使用函数的地方(函数名),然后按 Ctrl+Q 快捷查看函数信息。最后在 Pycharm 空白区域点击一下,便退出。

1
2
3
4
5
6
def download(url, img_dir):
"""下载图片,并写入到指定位置

:param url: 图片的 url
:param img_dir: 要写入的图片目录
"""

函数返回值

  • 对于逻辑运算,最终将布尔值返回的情况,不建议使用下面写法:
1
2
3
4
5
def f():
if condition:
return True
else:
return False

使用下面的写法更好:

1
2
def f():
return condition

比如:判断闰年的例子

提示:工作中针对需求的变化,应该冷静思考,不要轻易修改之前已经完成的能够正常执行的函数。

文件操作

步骤

  1. 通过 open() 函数打开文件,并创建一个 File 对象
  2. 调用 File 对象的 read() 或 write() 等方法,对文件内容进行读写操作
  3. 调用 File 对象的 close() 方法,关闭并保存文件内容

文件的打开模式主要包括:

  1. r 只读模式(默认)

  2. w 只写模式(如果文件存在,则先清空原有内容,文件不存在则创建文件)

  3. a 追加模式(不覆盖文件中原有内容)

如果传递给 open() 的文件名不存在,写模式和追加模式都会创建一个新的空文件。

读取的方法

  1. read() 将所有内容读到一个字符串中(包括换行符)。可以加参数,指定要读多少个字符

  2. readline() 一行一行读取,包括

  3. readlines()将所有内容,按照行,分到列表中

  4. seek(arg) 定位指针

    seek(0) 将文件流指针定位到文件首。

常用读取方法:

  1. for 循环与 readlines 迭代
1
2
3
f=open('ip.txt','r')
for i in f.readlines():
print(i,end='')

因为读取的文件每行末尾有 ,而 print 打印的时候,默认又会打印一个。所以最好的方法是让 print 不打印 。

或者通过字符串的 strip() 方法(默认去掉 whitespace,包括 ,空格)将文件中每一行末尾的 (Linux)或 (Windows)去除

1
2
3
f=open('ip.txt','r')
for i in f.readlines():
print(i.strip())

模块

模块是 Python 程序架构的一个核心概念。

概念

  • 模块也叫库,每个模块中都内置了大量的功能函数、类和变量。它 就像是积木,可以根据需要进行调用组合。

  • 模块就是程序,每个模块就是一个后级为 .py 的 Python 程序。

  • Python 的模块分为标准模块和第三方模块,标准模块是 Python 内置 的,第三方模块则需要安装之后才能使用。

  • 模块中定义的 全局变量函数 都是模块能够提供给外界直接使用的工具

  • 可以通过 help 命令了解一个模块的基本帮助信息,如: help('sys')

  • 模块名也是一个标识符,即: 如果你的 Py 文件想要可以当作模块被使用,其命名就要遵循标识符的命名规则。

Pyc 文件

c 是 compiled 的意思

当我们在导入自己写入的模块,并运行后,发现目录下生成了 __pycache__ 的目录,其中包括我们导入的模块被解释后生成的二进制文件 .pyc,用来加快速度(不用每次都解释,因为模块是相对固定,不修改经常修改的)

  • 这个 pyc 文件是由 python 解释器将模块的源码转换为字节码, python 这样保存 字节码是作为一种启动速度的优化。

字节码 python 在解释源程序时,分两步:

  1. 处理源码,解释生成字节码
  2. 对字节码进行处理,生成 CPU 能够识别的机器码。
  • 有了模块的字节码之后,下次运行程序,如果在上次保存字节码之后,没有修改过源代码, Python 将会加载 .pyc 文件,并跳过编译这个步骤。
  • 当 python 重编译时, 它会自动检查源文件和字节码文件的时间戳
  • 如果你又修改了源代码,下次程序运行时,字节码将自动重新创建。

导入

  • 无论是标准模块,还是第三方模块,都需要先导入之后,才可以使用

  • 在程序中应只导入必须的模块,以减少运行压力

  • 导入方法

    • 直接导入模块 import module_name
    • 从模块中导入某个函数: from module_name import function_name
  • 两种导入全部方法的方式

    • import os 应采用 “模块名.方法名” 的形式使用模块中的方法,如:os.system()
    • import os from * 可以直接使用方法名, 如:system() 方法,无需加上模块名作为前缀。

常用模块

sys 模块

sys.argv()

sys.argv 是一个列表变量,专门用来向 Python 解释器传递参数,类似 Shell 脚本编程中的位置变量

脚本文件名 sys.argv[0]

用户输入的参数的数量 len(sys.argv) -1

所有参数 str(sys.argv)

第一个参数 sys.argv[1]

1
2
3
4
脚本文件名:d:/pyworkspace/banner.py
用户输入的参数的数量:1
所有参数:['d:/pyworkspace/banner.py', 'hello']
第一个参数:hello

sys.exit()

  • sys.exit() 是一个方法,作用是推出当前程序
  • sys.exit() 退出当前程序,并返回 SystemExit 异常
  • sys.exit(0) 正常退出
  • sys.exit('程序退出‘) , 退出时,显示一段提示信息
1
2
3
4
5
if len(sys.argv) != 2:
print(f'正确使用方法:{sys.argv[0]} IP列表文件')
print('例如:banner.py ip.txt')
sys.exit()
filename=str(sys.argv[1].strip())

os 模块

  • os 模块提供了访问操作系统服务的功能

  • 它最常用的是 os.system() 方法,可以在 Python 中使用操作系统命令。

    1
    2
    import os
    os.system(cls)

    os.path.isfile() 方法,判断指定的对象是否为文件,返回 True 或 False

    os.path.isdir() 方法,判断指定的对象是否为文件,返回 True 或 False

    os.path.exists() 方法,判断指定的对象是否为文件,返回 True 或 False

    1
    2
    3
    4
    5
    6
    7
    >>> import os
    >>> os.path.isfile('banner.py')
    True
    >>> os.path.isdir('banner.py')
    False
    >>> os.path.exists('banner.py')
    True

多线程

通常通过多线程的方式来执行一个函数,从而使得该函数中的代码可以并发执行。

1
2
t = threading.Thread(target=要执行的函数,args=(向函数传递的参数))
t.start()

因为 args 是元组,所以如果元组中只有一个值的话,要在值后面加逗号,来指明它是元组。

一般只是用 Threading 中的 Thread 类,所以很多脚本都是使用下面语句导入的。

1
from threading import Thread

optparse 模块

  • 利用该模块可以设置选项,

扩展

引入 stderr 是因为:

1.操作员希望在屏幕上看到程序的运行进度,但是不希望看到诊断信息。 2.当有人想重定向诊断信息时,悲剧发生了,正常输出也被重定向了,程序的运行开始变得不可预期。 3.虽然引入的系统级标准错误文件,但依然存在多个程序同时输出诊断信息的问题。

很自然的,一个进程独占,诊断信息分离的输出流 stderr 就出现 节选自何时使用 STDERR? - 知乎

参考资料

Python Operators > Print a list in reverse order with range()? > Python range 逆序迭代