【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

对象的变化

不可变对象:对象所包含的值不允许被改变,如:intfloatboolstrtuplefrozensetbytes

可变对象:对象所包含的值允许被改变,如:listdictset

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__ 方法的对象,如:listtupledictsetstrbytesrangegenerator 等。

# 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]
posted @ 2024-01-04 11:14  asdio  阅读(15)  评论(0)    收藏  举报