前言
这篇文章主要用于记录Python3相关语法,方便自己查阅使用。
Python3语法笔记(前篇):
https://blog.csdn.net/Naisu_kun/article/details/130056943
这篇文章主要参考自官方文档中 教程(Tutorial) 部分:
英文文档:https://docs.python.org/3/
中文文档:https://docs.python.org/zh-cn/3/
函数
Python中使用 def
来定义函数,和大部分语言一样,函数可以有输入参数和返回内容:
def func1(): # 没有输入参数和返回的函数
pass # 一些语句
def func2(arg1, arg2): # 有输入参数和返回的函数,多个输入参数之间使用 , 分隔
pass # 一些语句
return 233
输入参数
函数的输入参数可以有默认值( 默认参数 ),有默认值的参数必须放在后面:
调用函数时也可以使用输入参数名称来设置特定参数值( 关键字参数 ):
前面两个例子中可以看到函数使用时输入参数可以使用函数定义时的顺序输入,也可以使用关键字方式,Python中也可以使用符号来强制规定使用顺序或者关键字:
def func(arg1, /, arg2=22, *, arg3=33):
# / 前的参数使用时只能用顺序
# * 后的参数使用时只能用关键字
函数输入参数中最后可以使用可变参数,在调用时可以传入任意个数参数:
在调用函数时可以直接解包传入的列表、元组或字典等元素,分散成一个个独立的位置参数:
输入参数使用时需要注意值传递和引用传递的问题:
- 值传递: 参数类型为不可变类型(字符串、数字、元组),函数内部修改传入的参数 不会 影响原始数据;
- 引用(地址)传递: 参数类型为可变类型(列表,字典),函数内部修改传入的参数 会 影响原始数据;
另外默认参数使用可变类型时也需要特别注意:
传入参数也可以是函数,就是通常所说的回调函数,这个也非常常用,甚至算是必不可少的功能。
返回值
Python中每个函数中都有 return
语句,即使你没写也会有一个默认的 return None
:
return
通常只能返回一个对象,如果想要返回多个对象可以把需要返回的东西都封装到一个列表、元组等元素中。Python中也提供了进一步的简化:
return
也可以返回函数,常用的场景是函数内部定义函数,然后返回该函数。这个经常来拿做 闭包 使用:
装饰器(decorator)
装饰器是一个语法糖,可以在不改变原有函数的情况下增加函数功能:
装饰器也是可以带入参数的:
一个函数也可以使用多个装饰器:
需要注意的是一个函数如果用上了装饰器,那么会丢失原本的 __name__
、 __doc__
等属性,这个可以使用语言内置的 @wraps()
装饰器来处理:
Lambda表达式(匿名函数)
使用 lambda
关键词可以临时性的定义一个函数:
文档和注解
定义函数时函数名的下面可以使用多行字符串方式编写函数文档:
Python是弱类型的,函数中输入输出内容也如此,不过可以使用 注解 来提示说明相关参数的类型:
需要注意的是 注解 只是提示性内容,解释器运行代码时并不会强制检查。
类
类和实例
类和对象是面向对象的语言中比较常用的功能。简单来说类就是对一个对象的抽象,其中包含了对象具有的一些属性(变量)和方法(函数)。下面是Python中类的最基本使用例子:
需要注意的是在类中如果不是像上面那样在构造函数中使用 self.xxx
方式声明的变量,而是直接和方法同级声明的普通变量,这将成为类变量,这在有些时候会产生意料之外的问题:
前面使用中实例的属性是可以在使用是获取和修改的,在实际使用时通常会有对实例属性的获取和修改进行特定处理的需求,比如下面的一些例子:
特殊方法
前面出现过 __init__(self[, ...])
这个方法,其实这种 __xx__
形式的方法是Python中的自带的特殊的方法,这些方法通常会在特定操作的时候被调用,比如 __init__
就会在实例被创建的时候调用,下面是一些演示:
更多的这类方法可以查看 Python语言参考手册 中 数据模型 章节的 特殊方法名称 。
继承
面向对象语言中涉及到类,往往还会有继承的概念,一个类(子类)可以继承自一个或多个类(父类)。子类可以直接拥有父类的属性和方法,子类也可以有自己的属性和方法,子类还可以重写(Override)父类的方法:
class P1:
def __init__(self):
print('P1构造方法')
def fun1(self):
print('P1 func1')
class P2:
def __init__(self):
print('P2构造方法')
def fun2(self):
print('P2 func2')
class Child(P1, P2): # Child类继承 P1 P2 两个类
def __init__(self):
super().__init__() # super()相当于第一个父类(P1)
P2.__init__(self) # 调用 P2 类的构造方法
print('Child构造方法')
def fun1(self): # 重写P1类中的fun1方法
super().fun1() # 调用P1类中的fun1方法
print('Child func1')
child = Child()
child.fun1()
child.fun2()
枚举类
Python中没有枚举类型,可以使用枚举类来代替:
from enum import Enum, unique
@unique # 该装饰器用来检查内部不会有重复的值
class Color(Enum):
red = 1
green = 2
blue = 3
print(Color.green) # 枚举类型直接通过 类名.属性 来访问
print(Color.green.name) # 访问属性名称
print(Color.green.value) # 访问属性值
# Color.green.value = 233 # 枚举类型的值无法修改
错误和异常
Python中的异常处理和大多数语言也很相似:
try:
pass # 执行可能会出现异常的操作
except Exception: # 出现异常时分支,Exception为异常类型,可以使用元组包含多个异常类型,或者什么都不写来捕获所有异常
pass
else: # 如果存在try和except,并且try正常执行后进入的分支
pass
finally: # 不管是否出现异常,在这整个代码块结束前进入的分支
pass
各种异常类型可以在 Python标准库 的 内置异常 章节中查看。
Python中可以使用 raise
关键词来抛出异常。另外也可以使用 assert
关键词来测试表达式真假,如果为假则抛出 AssertionError
异常。文章来源:https://www.toymoban.com/news/detail-428249.html
后记
这里只是粗略记录了一些Python的语法。Python作为脚本语言来说语法足够简单与灵活,可以算得上是比较不错的语言了(除了缩进和私有化)。文章来源地址https://www.toymoban.com/news/detail-428249.html
到了这里,关于Python3语法笔记(后篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!