【python基础】1.python基础.
Python 语言基础
Python 对象和引用
一切皆对象
python3 中一切皆对象,每个对象由标识、类型、值组成。
- 标识用于唯一标识一个对象
- 类型决定了该对象的可取值范围和可执行的操作
- 值则是对象表示的数据
num = 123
print(type(num))
print(id(123))
print(num)
变量和引用
Python 中的对象是计算机内存中的一块区域。
为了引用对象,必须通过赋值操作,将对象的引用赋值给变量。
变量是一个符号,指向对象的引用,多个变量可以指向同一个对象。如果一个对象没有被引用,那么它就会被回收。
python 中变量不需要显式声明,但是必须赋值后才能引用,否则会报错
Python 是强类型语言,每个变量只支持该类型允许的操作,不同类型的变量不能混合使用
a = 123
print(id(a)) # 140719805056592
b = a
print(id(b)) # 140719805056592
a = 456
print(id(a)) # 140719805057360
变量的声明和赋值
声明
- 变量名只能包含字母、数字、下划线
- 变量名不能以数字开头
- 变量名不能是 Python 关键字
- 变量名区分大小写
- 以下划线开头的变量名有特殊含义,
_xxx
:以单下划线开头的变量名,表示不能直接访问的类属性,需通过类提供的接口进行访问,不能用from xxx import *
导入__xxx
:以双下划线开头的变量名,表示类的私有成员,不能通过obj.__xxx
访问__xxx__
: 以双下划线开头和结尾的变量名,表示 Python 的内置变量,如__init__
、__name__
、__doc__
等
Python 中没有常量的概念,但是可以通过约定俗成的方式来表示常量,如:
MAX_VALUE = 100
。
赋值
=
为赋值操作符,将右边的值赋给左边的变量- 链式赋值
a = b = c = 123
- 复合赋值
a += 1
等价于a = a + 1
- 解包赋值
将系列数据解包赋值给多个变量
a, b, c = 1, 2, 3
print(a, b, c) # 1 2 3
# 如果只需要其中的某几个值,可以用 _ 代替不需要的值
a, _, c = 1, 2, 3
print(a, c) # 1 3
# 解包赋值时,等号右边的值必须是一个可迭代对象
a, b, c = [1, 2, 3]
print(a, b, c) # 1 2 3
a,b = 1 # ValueError: too many values to unpack (expected 2)
对象的比较
is
比较两个对象的标识是否相同,即是否引用同一个对象==
比较两个对象的值是否相等
a = 123
b = 123
print(a is b) # True
print(a == b) # True
a = 123
b = 123.0
print(a is b) # False
print(a == b) # True
对象的变化
不可变对象:对象所包含的值不允许被改变,如:int
、float
、bool
、str
、tuple
、frozenset
、bytes
。
可变对象:对象所包含的值允许被改变,如:list
、dict
、set
。
a = 123
print(id(a)) # 140719805056592
a = 456
print(id(a)) # 140719805057360 # a 指向了新的对象
a = 123
print(id(a)) # 140719805056592 # a 又指向了原来的对象
lst = [1, 2, 3]
print(id(lst)) # 140719805056592
lst.append(4)
print(id(lst)) # 140719805056592
Python 语句
简单语句
- 表达式语句
- 赋值语句
assert
语句:assert <expr>, <expr>
, 如果<expr>
为真,则什么都不做,否则抛出AssertionError
异常,异常信息为<expr>
的值pass
语句: 什么都不做,只是一个占位符,用于在语法上需要语句,但程序什么都不做的情况del
语句: 用于删除对象引用,如:del a
,删除变量a
的引用,如果a
是最后一个引用,那么对象就会被回收return
语句: 用于从函数中返回,如果没有指定返回值,则返回None
yield
语句: 用于从生成器函数中返回,返回一个值,并暂停生成器函数的执行
def gen():
yield 1
yield 2
yield 3
g = gen()
print(next(g)) # 1
print(next(g)) # 2
print(next(g)) # 3
print(next(g)) # StopIteration
raise
语句: 用于抛出异常,如:raise ValueError('invalid value')
break
语句continue
语句import
语句: 用于导入模块,如:import os
global
语句: 用于声明变量为全局变量,如:global a
nonlocal
语句: 用于声明变量为非局部变量,如:nonlocal a
def outer():
a = 1
def inner():
# nonlocal 表示 a 不是局部变量,而是外部函数的变量
nonlocal a
a = 2
inner()
print(a) # 2
复合语句
if
语句while
语句for
语句try
语句with
语句
with
语句用于简化try/finally
模式,如:
等价于with open('test.txt') as f: for line in f: print(line)
f = open('test.txt') try: for line in f: print(line) finally: f.close()
def
语句class
语句
书写规则
- 每个语句独占一行
- 反斜杠
\
用于连接多行语句 - 分号
;
用于在一行中指定多个语句
Python 程序流程控制
顺序结构
顺序结构是程序中最简单的结构,程序按顺序执行,不会有任何分支和循环。
选择结构
选择结构用于根据条件选择执行不同的代码,Python 中的选择结构有两种形式:if
语句和三元表达式。
if 语句
if
语句的语法格式如下:
if <expr>:
<statement>
elif <expr>:
<statement>
else:
<statement>
<expr>
是一个表达式,如果表达式的值为真,则执行 <statement>
,否则不执行。
三元表达式
三元表达式的语法格式如下:
<expr1> if <expr2> else <expr3>
如果 <expr2>
的值为真,则返回 <expr1>
的值,否则返回 <expr3>
的值。
循环结构
循环结构用于重复执行一段代码,Python 中的循环结构有两种形式:while
循环和 for
循环。
可迭代对象
可迭代对象是指实现了 __iter__
方法的对象,如:list
、tuple
、dict
、set
、str
、bytes
、range
、generator
等。
# range 是一个可迭代对象
for i in range(10):
print(i)
# 从start开始,到stop结束,步长为step
for i in range(1, 10, 2):
print(i)
enumerate 函数
range 函数只能生成等差数列,如果需要遍历一个可迭代对象,可以使用 enumerate
函数,它会将可迭代对象的每个元素和元素的下标组成一个元组,然后返回一个可迭代对象。
lst = ['a', 'b', 'c']
for i, v in enumerate(lst):
print(i, v)
map 函数
map(func,seq1[,seq2,...])
将func作用于seq中的每一个元素,结果作为可迭代对象返回。
list(map(abs, [-1, -2, -3])) # [1, 2, 3]
# 内联函数
list(map(lambda x: x * x, [1, 2, 3])) # [1, 4, 9]