【python记录】① 基础语法——预备知识、数据类型、运算类型、条件语句、循环语句、迭代器和生成器概述

预备知识

1、环境信息输出

输入输出
python -V/–version输出Python版本号
python -d在解析时显示调试信息

2、注释:

单行注释以 # 开头
多行注释可以用多个 # 号,还有 ‘’'“”"

3、声明文件的编码

# -*- coding: encoding -*-

encoding’ 可以替换为 cp1252 utf-8 或其他。

4、保留字

import keyword
print(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’]

5、linux/Unix编程

在脚本顶部添加以下命令让Python脚本可以像SHELL脚本一样可直接执行:

#! /usr/bin/env python3

修改脚本权限,使其有执行权限,命令如下:

$ chmod +x hello.py

6、模块

① from fibo import fib, fib2
② import fibo as fib
③ from fibo import fib as fibonacci
④ 内置函数 dir() 用于查找模块定义的名称
⑤ if __name__ == ‘__main__’:程序将运行

7、包

① 用“带点号模块名”来构造 Python 模块命名空间的一种方式。 例如,模块名 A.B 表示名为 A 的包中名为 B 的子模块
② 需要有 init.py 文件才能让 Python 将包含该文件的目录当作包来处理,在最简单的情况下,init.py 可以只是一个空文件,但它也可以执行包的初始化代码或设置 all 变量

__all__ = [“echo”, “surround”, “reverse”] # 这意味着 from sound.effects import * 将导入 sound.effects 包的三个命名子模块

注:如果没有定义 __all__,from sound.effects import * 语句 不会 把包 sound.effects 中的所有子模块都导入到当前命名空间;它只是确保包 sound.effects 已被导入(可能还会运行__init__.py 中的任何初始化代码),然后再导入包中定义的任何名称。
③ 相对导入:from . import echo

数据类型

python变量不需要声明,每个变量在使用前都必须赋值
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组)
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)
判断数据类型:type(a)或isinstance(a, int)
删除对象:del var_a, var_b

1、数字型

例: a, b, c, d = 20, 5.5, True, 4+3j

① 改变数字数据类型的值,将重新分配内存空间
② 可以使用del语句删除一些数字对象的引用

类型解释
int整数型
bool布尔型
float浮点型
complex复数

2、字符串

例:str = ‘Runoob’

① 定义:单引号 ’ 和双引号 " 使用完全相同,使用三引号(‘’’ 或 “”")可以指定一个多行字符串
② 转义符 \,使用 r 可以让反斜杠不发生转义
③ 字符串可以用 + 运算符连接在一起,用 * 运算符重复
④ 字符串切片 str[start : end : step],其中 start(包含)是切片开始的索引,end(不包含)是切片结束的索引,step表示步长;字符串索引从左往右以 0 开始,从右往左以 -1 开始
⑤ 索引字符串越界会出错,但切片会自动处理越界
⑥ 字符串不能修改,是 immutable 的,不能索引赋值
⑧ 内置函数 len() 返回字符串的长度
⑧ 可以用not in或者in来判断某个字符串或者字符是否在当前字符串中

3、列表

例:list = [ ‘abcd’, 786 , 2.23, ‘runoob’, 70.2 ]

① 用方括号标注,逗号分隔的一组值
② 元素的类型可以不相同,它支持数字,字符串甚至可以包含列表
③ 可以被索引和截取,列表被截取后返回一个包含所需元素的新列表
④ 为切片赋值可以改变列表大小,甚至清空整个列表(letters[:] = [])
⑤ 可以用 + 运算符连接在一起,用 * 运算符重复
⑥ 当rgba = rgb时,二者是同一地址,改变一个则另一个也会改变

4、元组

例:tuple = ( ‘abcd’, 786 , 2.23, ‘runoob’, 70.2 )

① 与列表类似,不同之处在于元组的元素不能修改
② 元组写在小括号 () 里,元素之间用逗号隔开
③ 可以被索引和截取
④ 元组的元素不可改变,但它可以包含可变的对象,比如list列表
构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:tup1 = () # 空元组;tup2 = (20,) # 一个元素,需要在元素后添加逗号(这是因为在没有逗号的情况下,Python会将括号解释为数学运算中的括号,而不是元组的表示)
⑤ 可以使用 + 操作符进行拼接

5、集合

例:sites = {‘Google’, ‘Taobao’, ‘Runoob’, ‘Facebook’, ‘Zhihu’, ‘Baidu’}
sites = set(‘alacazam’)

① 是一种无序、可变的数据类型,用于存储唯一的元素。
② 集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。
③ 在 Python 中,集合使用大括号 {} 表示,元素之间用逗号 , 分隔,也可以使用 set() 函数创建集合(创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典)
④ 可以进行运算:a - b(a 和 b 的差集)、a | b(a 和 b 的并集)、a & b(a 和 b 的交集)、a ^ b(a 和 b 中不同时存在的元素)

6、字典

例:tinydict = {‘name’: ‘runoob’,‘code’:1, ‘site’: ‘www.runoob.com’}

① 是无序的对象集合,通过键来存取的
② 是一种映射类型,字典用 { } 标识,是键(key) : 值(value) 的集合
③ 键(key)必须使用不可变类型。在同一个字典中,键(key)必须是唯一的
④ 构造方法:dict([(‘Runoob’, 1), (‘Google’, 2), (‘Taobao’, 3)])或者dict = {};dict[‘one’] = “1”
⑤ 输出所有key:tinydict.keys()、输出所有value:tinydict.values()

7、字节

例:x = bytes(“hello”, encoding=“utf-8”)

① bytes 类型表示的是不可变的二进制序列(byte sequence)。
② bytes 类型中的元素是整数值(0 到 255 之间的整数),而不是 Unicode 字符。通常用于处理二进制数据,比如图像文件、音频文件、视频文件等等
③ 创建:x = b"hello"或者x = bytes(“hello”, encoding=“utf-8”)

数据类型转换

1、隐式转换

number类型的数据进行运算时可以直接转换

2、显示转换

语法解释
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)将一个整数转换为一个八进制字符串

基础运算

1、算数运算:

类型解释
+/-加减运算
*乘法运算
**乘方运算
/除法运算 返回浮点数
//除法运算 得到整数
%除法运算 得到余数

注:** 比 ± 的优先级更高

2、比较运算:

返回True或者Fals,,所有比较运算符返回1表示真,返回0表示假

类型解释
==等于 - 比较对象是否相等 (a == b)
!=不等于 - 比较两个对象是否不相等 (a != b)
>大于 - 返回x是否大于y (a > b)
<小于 - 返回x是否小于y (a < b)
>=大于等于 - 返回x是否大于等于y (a >= b)
<=小于等于 - 返回x是否小于等于y (a <= b)

3、赋值运算

类型解释
=简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
+=加法赋值运算符 c += a 等效于 c = c + a
-=减法赋值运算符 c -= a 等效于 c = c - a
*=乘法赋值运算符 c *= a 等效于 c = c * a
/=除法赋值运算符 c /= a 等效于 c = c / a
%=取模赋值运算符 c %= a 等效于 c = c % a
**=幂赋值运算符 c **= a 等效于 c = c ** a
//=取整除赋值运算符 c //= a 等效于 c = c // a
:=海象运算符,这个运算符的主要目的是在表达式中同时进行赋值和返回赋值的值。Python3.8 版本新增运算符。
#等价的操作
n = 10
if n > 5:
    print(n)
    
if (n := 10) > 5:
    print(n)

4、位运算

类型解释
&按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
|按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1
^按位异或运算符:当两对应的二进位相异时,结果为1
~按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1
<<左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0
>>右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数

5、逻辑运算

类型解释
andx and y 布尔"与" - 如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值
orx or y 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值
notnot x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True

6、成员运算

类型解释
in如果在指定的序列中找到值返回 True,否则返回 False
not in如果在指定的序列中没有找到值返回 True,否则返回 False

7、身份运算

类型解释
is判断两个标识符是不是引用自一个对象,类似 id(x) == id(y)
is not判断两个标识符是不是引用自不同对象,类似 id(x) != id(y)

注: id() 函数用于获取对象内存地址。

8、lambda语句

语法:lambda [arg1 [,arg2,…argn]]:expression

add = lambda x, y: x+y
a = add(1, 2) # a = 3

#map映射
a = map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # a = [1, 4, 9, 16, 25]
a = map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]) # a = [3, 7, 11, 15, 19]

#reduce累计
a = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5]) # a = 15 (1+2+3+4+5)
a = reduce(lambda x, y: x * 10 + y, [1, 3, 5, 7, 9]) # a = 13579 

#sorted排序 语法:sorted(iterable, key=None, reverse=False) reverse = True 降序,False 升序
L=[('b',2),('a',1),('c',3),('d',4)]
a = sorted(L, key=lambda x:x[1]) # a = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]

#filter过滤 语法:filter(function, iterable) 返回迭代器对象
newlist = filter(lambda x: x % 3 == 0, [1, 2, 3])
a = list(newlist) # a = [3]

注:参考

9、运算优先级

圆括号的表达式>切片>await x>乘方>正,负,按位非 NOT>乘,矩阵乘,除,整除,取余>加和减>移位>按位与>按位异或>按位或>比较运算>逻辑非>逻辑与>逻辑或>条件表达式(if else)>lambda 表达式>赋值表达式

注:① await语句可以参考这儿,讲的十分详细。

条件控制语句、循环语句和其他语句

1、条件控制语句

① if elif else:判断
② match,case:接受一个表达式并把它的值与一个或多个 case 块给出的一系列模式进行比较

match status:
    case 400:
        return "Bad request"
    case 401 | 403 | 404:
        return "Not found"

#可以组合if语句
match point:
    case Point(x, y) if x == y:
        print(f"Y=X at {x}")
    case Point(x, y):
        print(f"Not on the diagonal")

③ 注意事项
(1)比较操作支持链式操作。例如,a < b == c 校验 a 是否小于 b,且 b 是否等于 c
(2)比较操作可以用布尔运算符 and 和 or 组合,其参数从左至右求值,一旦可以确定结果,求值就会停止
(3)序列对象可以与相同序列类型的其他对象比较。这种比较使用字典式顺序:首先,比较前两个对应元素,如果不相等,则可确定比较结果;如果相等,则比较之后的两个元素,以此类推,直到其中一个序列结束

2、循环语句

① while:条件循环
② for:循环
③ 循环中的else子句:在 for 循环中,else 子句会在循环成功结束最后一次迭代之后执行;在 while 循环中,它会在循环条件变为假值后执行
④ 循环技巧
(1)range() :生成序列

for i in range(0, 10, 3)) # i = 0, 3, 6, 9

(2)len():输出长度

for i in range(len(a))

(3)enumerate():迭代器

for i, element in enumerate(seq)

(4)zip() :同时循环两个或多个序列时,可以将其内的元素一一匹配

for q, a in zip(questions, answers)

(5)reversed() :逆向对序列进行循环

for i in reversed(range(1, 10, 2)) # 9 7 5 3 1

(6)sorted() :按指定顺序循环序列

for i in sorted(basket)

(7)set():去除序列中的重复元素

for f in sorted(set(basket))

注:循环时不应当在循环内部改变判断变量的值(list等等)

3、其他语句

① break:跳出最近的一层 for 或 while 循环
② continue:继续执行循环的下一次迭代
③ pass:不执行任何动作。语法上需要一个语句,但程序毋需执行任何动作时,可以使用该语句;可用作函数或条件语句体的占位符

迭代器和生成器

1、迭代器

迭代器有两个基本的方法:iter() 和 next()。字符串,列表或元组对象都可用于创建迭代器
① 可以使用常规for语句进行遍历

list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象
for x in it:
    print (x, end=" ")

②可以使用 next() 函数进行遍历

import sys         # 引入 sys 模块
list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象
while True:
    try:
        print (next(it))
    except StopIteration:
        sys.exit()

③ 创建迭代器

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
 
  def __next__(self):
    x = self.a
    self.a += 1
    return x

2、生成器

使用了 yield 的函数被称为生成器(generator),是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
运行方式:当在生成器函数中使用 yield 语句时,函数的执行将会暂停,并将 yield 后面的表达式作为当前迭代的值返回。然后,每次调用生成器的 next() 方法或使用 for 循环进行迭代时,函数会从上次暂停的地方继续执行,直到再次遇到 yield 语句。这样,生成器函数可以逐步产生值,而不需要一次性计算并返回所有结果。调用一个生成器函数,返回的是一个迭代器对象。

def countdown(n):
    while n > 0:
        yield n
        n -= 1
 
# 创建生成器对象
generator = countdown(5)
 
# 使用 for 循环迭代生成器
for value in generator:
    print(value)  # 输出: 5 4 3 2 1

参考
python官方文档
总结文档

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值