Python基础语法
Python变量
同时对多个变量赋值
1 | # a = 1 |
可以使用del删除已经定义的变量
1 | del value_name, value_name_2 |
Python数据类型
- 数字 Numbers
- 整型 int
- 浮点型 float
- 布尔型 bool
- 复数型 complex
- 字符串 String
- 列表 List
- 元组 Tuple
- 集合 Sets
- 字典 Dictionaries
python3中有以下几种seq类型的变量
- list
- tuple
- set
- dict
seq数据类型提供了以下内置函数:
- len
- max
- min
- list
- str
- sum
- sorted
- reversed
- enumerate
1 | ### Numbers |
1 | print(isinstance(1, int)) # True |
isinstance 和 type 的区别在判定子类与其继承的父类的关系时会体现出来:
1 | class Parent: |
type
1 | print(type(Children()) == Children) # True |
isinstance
1 | print(isinstance(Children(), Parent)) # True |
Number
python中存在两种除法:
1 | print(5/2) # 2.5 |
- a/b
- 除法,返回float类型数值
- a//b
- 整除,返回int类型数值
- int(x)
- float(x)
- complex(x)
- complex(x, y)
- x: 实数部分
- y: 虚数部分
String
在字符串前加r前缀,能够使转义字符无效化
1 | print("abc\tdef") # abc def |
使用 “””…””” 或 ‘’’…’’’ 表示续行
1 | print(''' |
- 正向索引
- 从左向右
- 从0开始递增
- 负向索引
- 从右向左
- 从-1开始递减
1
2
3string = '123456789'
print(string[0]) # 1
print(string[-1]) # 9
1 | string[[start_index] : [end_index]] |
1 | string = '123456789' |
字符串不能通过索引值引用的方式改变
1 | str = "Hello World" |
和C/C++的printf方法类似
1 | # It's 18 o'clock, let's go off work |
与JavaScript的模板字符串类似
1 | time, event = 18, 'get off work' |
List
列表加法
1 | list_A = [1,2,3,4,5] |
列表乘法
1 | list_A = [1,2,3] |
乘法也能用于初始化指定长度的列表:
1 | print([None]*5) # [None, None, None, None, None] |
List可以通过切片进行增删改查操作
1 | arr = list('123456789') |
1 | arr = list('123456789') |
1 | arr = list('123456789') |
1 | arr = list('123456789') |
- append
- extend
- insert
1 | list_A = [] |
- pop
- remove
- clear
1 | list_A = [1,2,3,4,3,5] |
- count
- index
1 | list_A = [1,2,3,4,3,5] |
- append 入栈
- pop 出栈
1 | from collections import deque |
[expression(x) for x in seq]
1 | vec = [2, 4, 6] |
加入if过滤
[expression(x) for x in seq if expression(x)]
1 | vec = [2, 4, 6] |
嵌套循环
[expression(n_1, n_2, …) for n_1 in arr_1 for n_2 in arr_2 …]
1 | vec1 = [1,-1,2,-2,3,-3] |
1 | matrix_m_n = [ |
del list[start:end]
1 | arr = [1,2,3,4,5] |
Tuple
元组元素无法修改,
当元组中只有一个元素时,需要在唯一元素后加一个逗号,否则会被当做括号运算符
1 | tup1 = () |
甚至可以不加括号的创建元祖:
1 | t = 123, 'hello', True, ('abc', False) |
Tuple支持加法拼接:
1 | tup_1 = (1,) |
operator是专门用来实现数据比较功能的模块
1 | import operator |
Sets
创建空集合需要使用set,方便和空字典区分开:
1 | blank_set = set() |
1 | set_A = {1, 2, 3, 4, 5, 4, 3, 2, 1} |
- add 添加单个
- update 保留并集/添加元素
- discard 移除不存在的集合元素时不会报错
- remove 移除不存在的集合元素时会报错
- clear 清除所有
- difference_update 移除差集
- intersection_update 保留交集
- symmetric_difference_update 保留异或集
- pop 随机删除
- discard 删除指定
- remove 删除指定
- difference 差集
- intersection 交集
- symmetric_difference 异或集
- union 并集
- isdisjoint 是否存在交集
- issubset 判断子集
Dictionaries
dict的key只能是不可改变类型的数据
- number
- string
1 | dict_A = { |
1 | dict_A = dict(a=1, b=2, c=3) |
1 | tup = ( |
1 | dict_list = [ |
1 | set_dict = [ |
set是无序集合,因此创建出来的字典键值关系随机组合
1 | for_dict = {x: y**2 for x, y in [['a', 1], ['b', 2], ['c', 3]]} |
1 | dict_list = [ |
1 | dict.fromkeys(seq[, value]) |
1 | new_dict = dict.fromkeys(["a", "b", "c"], 123) |
1 | dict.get(key[, default=None]) |
1 | new_dict = {"a": 1, "b": 2, "c": 3} |
1 | dict.setdefault(key[, default=None]) |
1 | new_dict = {"a": 1, "b": 2, "c": 3} |
1 | target_dict.update(source_dict) |
1 | dict_A = {"a": 1, "b": 2, "c": 3} |
运算符
对于一些简单通用运算符,python和其他语言的差别不大:
- 算术运算符
- 比较运算符
- 赋值运算符
- 位运算符
- 逻辑运算符
- and
- or
- not
- 成员运算符
- in
- not in
- 身份运算符
- is
- is not
1 | new_list = [x for x in [1, 2, 3]] |
1 | (A is B) = (id(A) == id(B)) |
循环
for-in
1 | range(start, end, step) |
利用range控制循环次数
1 | num_list = list('0123456789') |
利用range创建数字序列
1 | print(list(range(0, 10, 3))) # [0, 3, 6, 9] |
for-in/while + else
进入else的条件:
- 穷尽列表
- 循环没有被break终止
1 | for n in range(2,10): |
进入else的条件:
- while条件为False
- 循环没有被break终止
1 | n = 2 |
迭代器&&生成器
可用于创建迭代器的数据类型:
- String
- List
- Tuple
- Set
- Dict
迭代器的两个主要函数:
- iter() 创建迭代器
- next(iter) 访问下一个元素
1 | it_list = iter(list('123')) |
使用了yield的函数被称为generator函数,
每次运行到yield语句时,都将返回yield后的值,
在执行next()时触发生成器的执行
1 | def fibonacci(n): |
函数
1 | def printinfo(name, age=35): |
1 | def printinfo(name, age=35): |
- def fun(*args)
- args以Tuple类型传入
- def fun(**args)
- args以Dict类型传入
推荐写法: 可变参数放最后
1 | def printinfo(arg1, *args): |
可变参数写在前, 固定参数需使用关键字参数传入
1 | def printinfo(*args, arg1=123): |
1 | def printinfo(**args): |
- lambda 只是一个表达式
- lambda 无法访问自有参数以外的任何参数
1 | lambda [args, [args2,....argn]]: expression |
1 | arr_add1 = lambda arg: int(arg)+1 |