Python 语法(全)

BBigSun 评论199阅读模式

使用代码段的形式,记录 Python 的大部分语法



查看 Python 版本

python -V
python --version


第一个 Python 程序

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print('Hello World!')
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

print('Hello World!')


运行 Python 脚本

python hello.py
python3 hello.py


指定 Python 编码

^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)
# -*- coding: utf-8 -*-
# coding=utf-8
# I want to use coding=utf-8


指定 Python 解释器

指定 Python 的解释器后,当直接 ./hello.py 执行 Python 脚本时,会自动选择解释器。文章源自十年又十年-https://www.bbigsun.com/461.html

#!/usr/bin/env python
#!/usr/bin/python


Python 标识符

  • 标识符第一个字符必须是字母表中的字母 A-Z a-z 或者下划线 _
  • 标识符其他字符由 字母 数字下划线 组成。
  • 标识符对大小写敏感。
  • 不能与保留字重名。


Python 保留字

输出当前版本的所有保留字文章源自十年又十年-https://www.bbigsun.com/461.html

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']


Python 命名规范(个人总结)

程序设计语言的命名规范中有几种:文章源自十年又十年-https://www.bbigsun.com/461.html

  • 常量单词全部大写,单词之间用下划线连接:MAX_NUMBER
  • 变量/函数单词全部小写,单词之间用下划线连接:student_number
  • 类名单词首字母大写:BookTemplate
  • 目录不要使用 -:DirName 或者 dir_name 或者 dirname
  • 文件单词全部小写,单词之间用下划线连接:get_python_log.py


Python 导入模块

Python 用 importfrom ... import ... 来导入模块文章源自十年又十年-https://www.bbigsun.com/461.html

  • 将整个模块导入: import somemodule
  • 从某个模块中导入某个函数: from somemodule import somefunction
  • 从某个模块中导入多个函数: from somemodule import firstfunc, secondfunc, thirdfunc
  • 将某个模块中的全部函数导入: from somemodule import *
  • 从某个目录导入某个文件: from somedir import somefile
  • 从某个文件导入某个函数: from somefile import somefunction


Python 注释

单行注释,#文章源自十年又十年-https://www.bbigsun.com/461.html

# 这是一行单行注释

多行注释,'''''' """"""文章源自十年又十年-https://www.bbigsun.com/461.html

"""
这是第一行注释
这是第二行注释
"""
'''
这是第一行注释
这是第二行注释
'''


Python 行与缩进

Python 通过行与缩进区分代码块,同一块代码,缩进格数要保持一致。文章源自十年又十年-https://www.bbigsun.com/461.html

if True:
    print('True')
else:
    print('False')


Python 多行语句

Python 多行语句用反斜杠 \ 连接文章源自十年又十年-https://www.bbigsun.com/461.html

sum = a + \
      b + \
      c

特例:[] {} () 多行不需要反斜杠 \ 连接文章源自十年又十年-https://www.bbigsun.com/461.html

sum = [1, 2,
       3, 4]


Python 单行多条语句

Python 在一行中使用多条语句,用 ; 隔开文章源自十年又十年-https://www.bbigsun.com/461.html

a = 10; print(a)


Python 输入

Python2 是 raw_input();Python3 是 input()

单行输入

s = input("等待用户输入:")
print(s)

多行输入

while True:
    s = input("等待用户输入:")
    if s == 'exit':
        break
    print(s)


Python 输出

student_name = "Tom"
student_age = "18"

# 输出为一行
print(student_name, student_age)

# 输出为两行,因为 print() 函数默认以回车键结尾
print(student_name)
print(student_age)

# 格式化输出
print("{} is {} years old!".format(student_name, student_age))

print(f"{student_name} is {student_age} years old!")

print("%s is %s years old" % student_name, student_age)


Python sys 输入输出

输入

sys.stdin 读取输入时会带上回车符 \n,可以用 strip() 函数去除

import sys

line1 = sys.stdin.readline()
line2 = sys.stdin.readline().strip()
  • read():将文件一次全部读取成一个字符串,包括特殊字符,需要较大内存
  • readline():将文件根据换行符一行一行读取
  • readlines():将文件一次性读取到内存,依行为单位读取为一个列表对象

输出

import sys

sys.stdout.write('hello' + '\n')


Python 标准数据类型

  1. Number(数字)
    • int、float、bool、complex(复数)。
  2. String(字符串)
  3. bool(布尔类型)
    • bool 是 int 的子类,True == 1,False == 0
  4. List(列表)
  5. Tuple(元组)
  6. Set(集合)
  7. Dictionary(字典)

不可变数据:

  • Number(数字)
  • String(字符串)
  • Tuple(元组)

可变数据:

  • List(列表)
  • Dictionary(字典)
  • Set(集合)


Python 运算符

  • 算术运算符
    • - + - * / % ** //
  • 比较(关系)运算符
    • == != > < >= <=
  • 赋值运算符
    • = += -= *= /= %= **= //= :=
  • 逻辑运算符
    • and or not
  • 位运算符
    • & | ^ ~ << >>
  • 成员运算符
    • in not in
  • 身份运算符
    • is is not
  • 运算符优先级
    • 括号 > 读取、切片、调用 > 算数运算符 > 位运算符 > 比较运算符 > 逻辑运算符 > 条件、lambada、赋值表达式


Python 数据类型转换

  • 隐式类型转换 - 自动完成
  • 显式类型转换 - 需要使用类型函数来转换

类型转换函数

int(x [,base]):将x转换为一个整数

float(x):将x转换到一个浮点数

complex(real [,imag]):创建一个复数

str(x):将对象 x 转换为字符串

repr(x):将对象 x 转换为表达式字符串

eval(str):用来计算在字符串中的有效Python表达式,并返回一个对象

tuple(s):将序列 s 转换为一个元组

list(s):将序列 s 转换为一个列表

set(s):转换为可变集合

dict(d):创建一个字典。d 必须是一个 (key, value)元组序列。

frozenset(s):转换为不可变集合

chr(x):将一个整数转换为一个字符

ord(x):将一个字符转换为它的整数值

hex(x):将一个整数转换为一个十六进制字符串

oct(x):将一个整数转换为一个八进制字符串



Python 赋值

var = 1
a, b = 1, 2


Python 交换变量值

a, b = 1, 2
a, b = b, a

Python 字符串基础

定义,使用 单引号 '' 或者 双引号 "" 对字符串定义

单行

s1 = 'string1'
s2 = "string2"

多行

s1 = '''line1
line2
line3
'''

s2 = """line1
line2
line3
"""

索引, 使用 [] 进行索引

s = '123456789'

# 取第2个字符
print(s[1])

# 取倒数第1个字符
print(s[-1])

# 取倒数第5个字符
print(s[-5])

切片, 使用 [:] 进行切片,左闭右开

s = '123456789'

# 取第3到第8个字符
print(s[2:8])

# 取第2到最后一个字符
print(s[2:])

# 取第一个到第8个字符
print(s[:8])

# 字符串反转
print(s[::-1])

# 只取偶数
print(s[1::2])

# 只取3的倍数
print(s[2::3])

拼接,使用 + 进行拼接

s1 = 'hello'
s2 = 'world'
s3 = s1 + ' ' + s2

重复输出,使用 * 进行重复输出

s = 'a' * 5

格式化,使用 % 进行格式化

s = '%s is a good student, he is %d years old.' % ('Tom', 18)


Python 字符串转义

单引号内嵌双引号格式保持不变,双引号内嵌单引号会自动转义

去除转义

s = r'this is a string'

转义符号 \



Python 列表

定义

list1 = []
list2 = list()


Python 元组

定义

t1 = ()
t2 = turple()


Python 字典

定义

dic1 = {}
dic2 = dict()


Python 集合

定义

s = set()


Python 条件控制

一种情况:

if True:
    print('true')

两种情况:非黑即白

if True:
    print('true')
else:
    print('false')

多种情况:

if True:
    print('1')
elif True:
    print('2')
else:
    print('3')

if 嵌套:

if True:
    if True:
        print('true')
    else:
        print('false')
else:
    print('false')

match...case Python3.10添加

status = input()
match status:
    case 100 | 101:
        print('not allowed')
    case 400:
        print('bad request')
    case 404:
        print('not found')
    case 502:
        print('ecs error')
    case _:
        print('Internet error')


Python for 循环

for i in range(10):
    print(i)
for i in range(10):
    print(i)
else:
    print("for 循环完成")


Python while 循环

flag = 1
while (flag): print("true")
while i < 10:
    print(i)
    i += 1
while i < 10:
    print(i)
    i += 1
else:
    print("while 循环完成")


Python 改变循环状态

  • break :中止循环
  • continue :继续执行
  • pass :空语句


Python 推导式

列表推导式

l = [x for x in range(10)]
l = [x for x in range(10) if x > 5]

字典推导式

l = [x*x for x in range(10)]
dic = {key: len(key) for key in l}
l = [x*x for x in range(10)]
dic = {key: len(key) for key in l if k > 40}

集合推导式

l = {x*2 for x in (1,2,3)}
l = {x*2 for x in (1,2,3) if x%2 == 0}

元组推导式

# 返回的是生成器,需要转换为元组
t = (x for x in range(1,10))
t = turple(t)


Python 函数

定义函数:

def func(a, b):
    return a + b
  • def:关键字
  • func:函数名称
  • (a, b):参数列表
  • return a + b:返回值

函数调用:

a , b = 1, 2
c = func(a, b)

参数传递:

  • 不可变类型,传递的是值,改变后返回新的对象。
  • 可变类型,传递的是引用,改变时会改变原对象。

参数:

  • 必须参数
  • 关键字参数
  • 默认参数
  • 不定长参数
def func(required_param, default_param=10, *var_turple)
    print(f"{required_param} 是必须参数")
    print(f"{default_param} 是默认参数,因为默认值为10")
    print(f"{var_turple} 是不定长参数,是一个元组")

# 当使用关键字指定参数时,这个参数称之为关键字参数,此时可以不用按照顺序传入
func(default_param=100, required_param='此时是关键字参数')


Python 类

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 方法:类中定义的函数。
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
  • 局部变量:定义在方法中的变量,只作用于当前实例的类。
  • 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
  • 实例化:创建一个类的实例,类的具体对象。
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

类定义

class SimpleClass:
    pass
class People:
    # 公有属性
    name = ''
    gender = ''
    # 私有属性
    __age = 0
    # 构造方法
    def __init___(self, name, gender, age):
        self.name = name
        self.gender = gender
        self.__age = age
    # 普通方法
    def get_age(self):
        print(self.__age)

# 实例化
p1 = People('xiaoming', 'boy', 18)
p1.get_age()

类的私有属性和私有方法都是在前面加双下划线 __。公有属性和方法可以通过 . 被外部调用,私有的不可以!

类继承

单继承

class Student(People):
    grade = ''
    def __init__(self, name, gender, age, grade):
        # 调用父类的构造方法
        People.__init__(self, name, gender, age)'
        self.grade = grade

多继承,多继承时,如果两个父类的方法相同,优先使用第一个父类的。

方法重写后,可以通过 super() 函数调用父类的方法

Python 支持运算符重载,我们可以对类的专有方法进行重载

类的专有方法:

  • __init__ : 构造函数,在生成对象时调用
  • __del__ : 析构函数,释放对象时使用
  • __repr__ : 打印,转换
  • __setitem__ : 按照索引赋值
  • __getitem__: 按照索引获取值
  • __len__: 获得长度
  • __cmp__: 比较运算
  • __call__: 函数调用
  • __add__: 加运算
  • __sub__: 减运算
  • __mul__: 乘运算
  • __truediv__: 除运算
  • __mod__: 求余运算
  • __pow__: 乘方


Python 异常处理

Python 语法(全)

try:
    runoob()
except AssertionError as error:
    print(error)
else:
    try:
        with open('file.log') as file:
            read_data = file.read()
    except FileNotFoundError as fnf_error:
        print(fnf_error)
finally:
    print('这句话,无论异常是否发生都会执行。')


Python 迭代器和生成器

迭代器有两个方法:iter() 和 next()

使用方法:

# 可迭代的序列
list = [1, 2, 3, 4, 5]
# 创建迭代器对象
it = iter(list)
# 输出迭代器下一个元素
print(next(it))

使用了 yield 的函数被称为生成器(generator)。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

生成器与列表的区别,只有在使用时才会占用内存,列表是直接读取到了内存,生成器适用于大量数据的时候使用

使用方法:

def gen(n):
    for i in range(n):
        yield i

# 创建一个生成器
g = gen(10)

# 下一个数据
print(g.__next__())

# 打印数据
for i in g:
    print(i)


Python 命名空间

命名空间是名称到对象的映射,大部分命名空间都是通过字典实现的。

命名空间一般分为三种:(内置 > 全局 > 局部)

  • 内置名称(built-in names), Python 语言内置的名称,比如函数名 abs、char 和异常名称 BaseException、Exception 等等。
  • 全局名称(global names),模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
  • 局部名称(local names),函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量。(类中定义的也是)

作用域:就是程序可以访问命名空间的区域,与命名空间相反,作用域从内向外,可以分为四种:

  • L(Local):最内层,包含局部变量,比如一个函数/方法内部。
  • E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。
  • G(Global):当前脚本的最外层,比如当前模块的全局变量。
  • B(Built-in): 包含了内建的变量/关键字等,最后被搜索。

内层修改外层:

num = 1
def fun1():
    global num  # 需要使用 global 关键字声明
    num = 123

内层修改嵌套层:

def outer():
    num = 10
    def inner():
        nonlocal num   # nonlocal关键字声明
        num = 100

纸上得来终觉浅,绝知此事要躬行。

weinxin
17688689121
我的微信
微信扫一扫
Python最后更新:2024-5-11
BBigSun
  • 本文由 BBigSun 发表于 2023年 4月 18日 11:11:34
  • 转载请务必保留本文链接:https://www.bbigsun.com/461.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定