标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。
以下划线开头的标识符有特殊含义,
单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 导入;
双下划线开头的标识符,如:__ xxx,表示私有成员;双下划线开头和结尾的标识符,如:__ xx,表示 Python 中内置标识,如:init() 表示类的构造函数。
and | exec | not | assert | finally | or |
---|---|---|---|---|---|
break | for | pass | class | from | |
continue | global | raise | def | if | return |
del | import | try | elif | in | while |
else | is | with | except | lambda | yield |
Python 输出使用 print()
print('Hello Python')
Python 提供了一个 input(),可以让用户输入字符串,并存放到一个变量里。
name = input()
print('Hi',name)
Python 中单行注释使用 #
,多行注释使用三个单引号('''
)或三个双引号("""
)。如下所示:
# 我是单行注释
'''
我是多行注释
我是多行注释
'''
"""
我是多行注释
我是多行注释
"""
常用:
#取模
a % b
#幂
a**b 表示 a 的 b 次幂
#取整除
9 // 4 结果为 2
#取反
~a
#异或
a ^ b
#左移动,右移动
a << 3
a >> 3
#布尔类型与,布尔类型或,布尔类型非
a and b
a or b
not a
#判断两个标识符是否引用同一个对象
a is b
#判断两个标识符是否引用不同对象
a is not b
格式:
f 判断条件1:
执行语句1...
elif 判断条件2:
执行语句2...
elif 判断条件3:
执行语句3...
else:
执行语句4...
str = 'Python'
for s in str:
print(s)
结果:
P
y
t
h
o
n
while 循环
Python 使用 def 关键字来声明函数,格式如下所示:
def 函数名(参数):
函数体
return 返回值
当我们不确定参数的个数时,可以使用不定长参数,在参数名前加 *
进行声明,格式如下所示:
def 函数名(*参数名):
函数体
如果要定义一个无任何功能的空函数,函数体只写 pass
即可。格式如下所示:
def 函数名():
pass
我们还可以使用 lambda
定义匿名函数,格式如下所示:
lambda 参数 : 表达式
# 空函数
def my_empty():
pass
# 无返回值
def my_print(name):
print('Hello', name)
# 有返回值
def my_sum(x, y):
s = x + y
print('s-->', s)
return s
# 不定长参数
def my_variable(*params):
for p in params:
print(p)
# 匿名函数
my_sub = lambda x, y: x - y
Python 中一个以
.py
结尾的文件就是一个模块,模块中定义了变量、函数等来实现一些类似的功能。Python 有很多自带的模块(标准库)和第三方模块,一个模块可以被其他模块引用,实现了代码的复用性。
包是存放模块的文件夹,包中包含
__init__.py
和其他模块,__init__.py
可为空也可定义属性和方法,在 Python3.3 之前的版本,一个文件夹中只有包含__init__.py
,其他程序才能从该文件夹引入相应的模块、函数等,之后的版本没有__init__.py
也能正常导入,简单来说就是 Python3.3 之前的版本,__init__.py
是包的标识,是必须要有的,之后的版本可以没有。
从包中引入模块有如下两种方式:
import …
import 包名1.包名2...模块名
from ... import ...
from … import …
from 包名1.包名2... import 模块名from 包名1.包名2...模块名 import 变量名/函数名
# a 模块中引入 b 模块
import pg1.b
from pg1 import b
# a 模块中引入 c 模块
import pg2.c
from pg2 import c
# a 模块中引入 c 模块和 d 模块
import pg2.c,pg2.d
from pg2 import c,d
# a 模块中引入包 pg2 下的所有模块
from pg2 import *
# a 模块中引入 d 模块中函数 d()
from pg2.d import d
# 调用函数 d()
d()
Python 中类的定义使用 class
关键字,语法如下所示:
class 类名:
属性 ...
方法 ...
比如我们定义一个类 Cat,如下所示:
class Cat:
# 属性
color = 'black'
# 构造方法
def __init__(self, name):
self.name = name
# 自定义方法
def eat(self, food):
self.food = food
print(self.name, '正在吃'+food)
构造方法 __init__()
会在类实例化时自动调用。无论构造方法还是其他方法都需要将 self
作为第一个参数,它代表类的实例。
类创建好后,我们可以直接通过类名访问属性,格式为:类名.属性名
,比如我们访问 Cat 类的 color 属性,如下所示:
print('color-->', Cat.color)
上面 Cat 类中定义的属性和方法都是公开的,除此之外我们还可以定义私有属性和方法,声明方式为:在属性名或方法名前加两条下划线,示例如下所示:
class Cat:
__cid = '1'
def __run(self):
pass
创建对象也称类的实例化,比如我们通过 Cat 类创建对象,如下所示:
# 创建对象
c = Cat('Tom')
访问属性和调用方法了,如下所示:
# 访问属性
print('name-->', c.name)
print('color-->', c.color)
# 调用方法
c.eat('鱼')
**同样对象外部 c
不能访问私有属性 __cid
及调用私有方法 __run
,**在内部私有属性和方法是可以被访问和调用的。
Python 支持类的继承,而且支持多继承,语法格式为:
class 基类(子类1, 子类2 ...): ...
示例如下所示:
# 波斯猫类
class PersianCat(Cat):
def __init__(self, name):
self.name = name
def eat(self, food):
print(self.name, '正在吃'+food)
#加菲猫类
class GarfieldCat(Cat):
def __init__(self, name):
self.name = name
def run(self, speed):
print(self.name, '正在以'+speed+'的速度奔跑')
# 单继承
class SingleCat(PersianCat):
pass
# 多继承
class MultiCat(PersianCat, GarfieldCat):
pass
#调用
sc = SingleCat('波斯猫1号')
sc.eat('鱼')
mc = MultiCat('波斯加菲猫1号')
mc.eat('鱼')
mc.run('50迈')
子类可以重写父类方法:
class SingleCat(PersianCat):
def eat(self, food ):
print(self.name, '正在吃'+food, '十分钟后', self.name+'吃饱了')
sc = SingleCat('波斯猫1号')
sc.eat('鱼')
Python 使用 open()
函数创建或打开文件,语法格式如下所示:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明如下所示:
'r'
(以文本模式打开并读取)。可选模式如下:模式 | 描述 |
---|---|
r | 读取(默认) |
w | 写入,并先截断文件 |
x | 排它性创建,如果文件已存在则失败 |
a | 写入,如果文件存在则在末尾追加 |
b | 二进制模式 |
t | 文本模式(默认) |
+ | 更新磁盘文件(读取并写入) |
以 txt 格式文件为例,我们不手动创建文件,通过代码方式来创建,如下所示:
open('test.txt', mode='w',encoding='utf-8')
函数 | 描述 |
---|---|
write(str) | 将字符串写入文件,返回写入字符长度 |
writelines(s) | 向文件写入一个字符串列表 |
我们使用这两个函数向文件中写入一些信息,如下所示:
wf = open('test.txt', 'w', encoding='utf-8')
wf.write('Tom\n')
wf.writelines(['Hello\n', 'Python'])
# 关闭
wf.close()
上面我们使用了 close() 函数进行关闭操作,如果打开的文件忘记了关闭,可能会对程序造成一些隐患,为了避免这个问题的出现,可以使用
with as
语句,通过这种方式,程序执行完成后会自动关闭已经打开的文件。如下所示:
with open('test.txt', 'w', encoding='utf-8') as wf:
wf.write('Tom\n')
wf.writelines(['Hello\n', 'Python'])
函数 | 描述 |
---|---|
read(size) | 读取指定的字节数,参数可选,无参或参数为负时读取所有 |
readline() | 读取一行 |
readlines() | 读取所有行并返回列表 |
with open('test.txt', 'r', encoding='utf-8') as rf:
print('readline-->', rf.readline())
print('read-->', rf.read(6))
print('readlines-->', rf.readlines())
函数 | 描述 |
---|---|
tell() | 返回文件对象在文件中的当前位置 |
file.seek(offset[, whence]) | 将文件对象移动到指定的位置;offset 表示移动的偏移量;whence 为可选参数,值为 0 表示从文件开头起算(默认值)、值为 1 表示使用当前文件位置、值为 2 表示使用文件末尾作为参考点 |
with open('test.txt', 'rb+') as f:
f.write(b'123456789')
# 文件对象位置
print(f.tell())
# 移动到文件的第四个字节
f.seek(3)
# 读取一个字节,文件对象向后移动一位
print(f.read(1))
print(f.tell())
# 移动到倒数第二个字节
f.seek(-2, 2)
print(f.tell())
print(f.read(1))
查看当前路径。
import osprint(os.getcwd())
返回指定目录下包含的文件和目录名列表。
import osprint(os.listdir('E:/'))
返回路径 path 的绝对路径。
import os# 当前路径(相对路径方式)print(os.path.abspath('.'))
将路径 path 拆分为目录和文件两部分,返回结果为元组类型。
import osprint(os.path.split('E:/tmp.txt'))
将一个或多个 path(文件或目录) 进行拼接。
import osprint(os.path.join('E:/', 'tmp.txt'))
返回 path(文件或目录) 在系统中的创建时间。
import osimport datetimeprint(datetime.datetime.utcfromtimestamp(os.path.getctime('E:/tmp.txt')))
返回 path(文件或目录)的最后修改时间。
import osimport datetimeprint(datetime.datetime.utcfromtimestamp(os.path.getmtime('E:/tmp.txt')))
返回 path(文件或目录)的最后访问时间。
import osimport datetimeprint(datetime.datetime.utcfromtimestamp(os.path.getatime('E:/tmp.txt')))
判断 path(文件或目录)是否存在,存在返回 True,否则返回 False。
import osprint(os.path.exists('E:/tmp.txt'))
判断 path 是否为目录。
import osprint(os.path.isdir('E:/'))
判断 path 是否为文件。
import osprint(os.path.isfile('E:/tmp.txt'))
返回 path 的大小,以字节为单位,若 path 是目录则返回 0。
import osprint(os.path.getsize('E:/tmp.txt'))print(os.path.getsize('E:/work'))
创建一个目录。
import osos.mkdir('E:/test')
创建多级目录。
import osos.makedirs('E:/test1/test2')
目录 test1、test2 均不存在,此时使用 os.mkdir() 创建会报错,也就是说 os.mkdir() 创建目录时要保证末级目录之前的目录是存在的。
将当前工作目录更改为 path。
import osprint(os.getcwd())os.chdir('/test')print(os.getcwd())
调用 shell 脚本。
import osprint(os.system('ping www.baidu.com'))