python基本语法
写在最前面
本文主要参考了https://www.w3school.com.cn/python/index.asp的python教程,小白学习python的初步笔记,之后如果再有想法,也会修改添加。
缩进写法
Python使用缩进指示代码块(缩进即代码行开头的空格)
空格数任意,至少一个(否则报错)
统一代码块使用相同数量空格
注释写法
注释为“#”开头
Python多行注释的写法:
- 通过每行插入“#”实现
- 利用python忽略未分配变量字符串,添加多行字符串(三单引号或三双引号)
函数和方法的区别
- 函数的调用是直接写,函数名(函数参数1,函数参数2,…)
- 方法是通过 对象
.
方法 调用的
变量写法
创建变量
- python没有声明变量命令,变量通过赋值创建
- 变量不需要使用特定类型声明,还可以在设置后改变类型
- 字符串变量用单引号或双引号表示
- 变量名必须以字母或下划线开头,只能包含字母数字和下划线
变量名区分大小写 - 可以一行为多个变量赋不同值,也可以一行多多个变量赋相同值
- 特定类型的变量,如复数,可采用如
x = complex(1j)
,查表得不同构造函数
变量输出
注意:print函数自带换行
输出时+
的用法:
- 组合文本和变量
x = "ping" print("what's your " + x)
- 组合两个字符串变量
- 组合两个数字相加(作数学运算符)
- 不能组合字符串与数字
组合字符串和数字format()
format()接收传递的参数,格式化并将它们放在占位符{}所在的字符串中
可以在{}加索引号保证占位符正确,否则为依次填入
quantity = 1
pokemon = 094
price = 470
myorder = "I want to pay {2} Pokémon Dollar for {0} pokemon {1}."
print(myorder.format(quantity, itemno, price))
变量类型
数字类型
- int,整数。正数或负数,没有小数,长度不限
- float,浮点数。包含小数的正数或负数
也可以是带“e”的科学数字,表示10的幂,如x = 3.0e8
- complex,复数。用j作为虚部,如
x = 2 + 3j
- 可以进行类型转换(无法将复数转换为其他类型)
- int(浮点数)为下舍入(用math模块采取别的取整)
- int(字符串)取字符串字面量
字符串类型
字符串创建及裁切
- 在Python中使用单引号或双引号是没有区别的,都可以用来表示字符串
字符串可赋值给变量 - 方括号可用于访问字符串的元素,第一个字符的位置为0
- 裁切返回字符类似matlab,如[2:5],返回位置2到位置5的字符(不包括位置5)
- 负索引表示从末尾开始计数,如[-5:-2],获取位置5到位置2的字符(不包括位置2)
字符串函数与方法
len()
函数返回字符串长度replace()
方法用另一段字符串来替换的replace()split()
方法根据指定分隔符拆分字符串
字符串方法返回新值,但不会改变原始字符串
更多方法可查表获得
布尔型
如果有某种内容,则几乎所有值都将评估为 True
除空字符串外,任何字符串均为 True
除 0 外,任何数字均为 True
除空列表外,任何列表、元组、集合和字典均为 True
内置函数,如检查对象是否为整数,返回布尔型
运算符写法
算术运算符
运算符 | 名称 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取模 |
** | 幂 |
// | 地板除(取整除) |
赋值运算符
类似c++里的赋值语句,=,+=,-=,*=之类
比较运算符
类似matlab,==等于,>=大于或等于
逻辑运算符
and,or
not,反转结果,如果结果为true,则返回false
身份运算符
is
如果两个变量是同一个对象,则返回true
不是比较对象值是否相等,而是依据同一个对象具有相同的内存位置
成员运算符
In
对象中存在具有指定值,则返回true
txt = "what's your ping"
x = "ing" in txt
print(x)
如可用于检查字符串是否存在特定短语或字符
位运算符
用于比较(二进制)数字
符号 | 逻辑含义 | 具体内容 |
---|---|---|
& | AND | 两个位均为1,则将每个位设为1 |
| | OR | 两个位中有一位为1,则将每个位设为1 |
^ | XOR | 两个位只有一位为1,则将每个位设为1 |
~ | NOT | 反转所有位 |
<< | 通过右侧推入零来左移,推掉最左边的位 | |
>> | 通过左侧推入最左边的位的副本来右移,推掉最右边的位 |
集合(数组)
列表,List是一种有序和可更改的集合。允许重复的成员。
元组,Tuple是一种有序且不可更改的集合。允许重复的成员。
集合,Set是一个无序和无索引的集合。没有重复的成员。
词典,Dictionary是一个无序,可变和有索引的集合。没有重复的成员。
可以用英文名字构造函数直接创建集合,如词典为dict()
列表 list(有序,可更改,允许重复)
创建列表
- 列表用方括号
[]
编写,如pokemon = ["Gengar","Leafeon"]
- 可以通过方括号内的索引号访问列表项
- 索引序号与字符串相同
负的索引表示从末尾开始,-1表示最后一个项目
指定索引范围用:
连接,注意只包括范围左边对应的项,不包括右边,返回的是带指定项目的新列表 - 更改特定项目的值,引用索引号
- 确定列表长度多少项,用
len()
函数 - 也可以使用list()构造函数创建列表
pokemon = list(("Gengar","Leafeon")) #注意双括号
修改列表
添加项目
用append()
方法将项目添加到列表末尾
用insert()
在指定索引处添加项目
删除项目
remove()
方法删除指定的项目 ,()中为删除的内容pop()
方法删除指定的索引,若未指定则删除最后一项del
关键字删除指定索引del text[0]
,删除完整列表del text
clear()
方法清空列表
复制列表
- 使用
=
复制
如使用list2 = list1
来复制表,则list2
视作对list1
的引用,list1
的更改也将自动在list2
中进行 copy()
方法- 内建list()复制
pokemon1 = ["Gengar","Leafeon"]
pokemon2 = list(pokemon1)
合并列表
- 合并两个列表,使用
+
运算符 - 添加所有元素从一个表到令一个表,如遍历所有元素
append()
方法 extend()
方法将一个列表中的元素添加到另一列表的末尾
其他列表常用方法
排序sort()
颠倒顺序reverse()
查表得更多(待更新ing)
元组 tuple(有序,不可更改,允许重复)
创建元组
- 用圆括号编写
- 用方括号内的索引号来访问
- 负索引用法相同
- 指定索引范围,返回的是带指定项目的新元组
- 创建只包含一个项目的元组时,要在该项目后加一个
,
否则会识别为字符串变量
修改元组
- 元组创建后即不可变
可以通过把元组转换为列表,更改列表,再把列表换回元组的方法修改 - 元组项目无法删除,可以
del
关键字删除整个元组
集合 set(无序,无索引,无重复)
创建集合
- 集合用花括号编写
- 集合是无序的,无法确定项目的显示顺序
访问集合
访问时因为set是无序的,可以用for
遍历set项目,或用in
关键字查询
修改集合
集合创建后无法更改项目,但是可以添加和删除项目
- 添加项目
- 向集合添加一个项,用
add()
- 向集合添加多个项,用
update()
,如pokemon.update(["Gengar","Leafeon"])#也可以不用中括号,用其他形式括号
- 向集合添加一个项,用
- 删除项目
- 删除指定项目可以用
remove()
和discard()
删除项目不存在时,将引发错误 用pop()
删除项目将删除最后一项
对于无序的集合来说,不知道删除哪一项
- 删除指定项目可以用
clear()
清空集合del
彻底删除集合
合并集合
union()
返回一个新集合,包含两个集合中的所有项目pokemon3 = pokemon1.union(pokemon2)#集合3包含了1和2
update()
将一个集合的所有内容插入到另一个集合pokemon2.updata(pokemon1) #将pokemon1的内容插入pokemon2中
以上两种方法都将排除重复项,如有对差异处理的需求可以采取其他方法
字典 dict(无序,可更改,有索引,无重复)
创建字典
- 用花括号编写,拥有键和值
thisPM = { "Gengar" : "94", "Leafeon" : "470" }
- 可以通过方括号内引用键名或
get()
方法来获取键的值 - 可以通过引用键名的方式更改特定项目的值
- 使用
dict()
构造函数创建字典(注意赋值使用等号而不是冒号)thisPM = dict(Gengar = "94", Leafeon = "470")
遍历字典
- 直接for循环遍历,返回的是字典的键值
- 可以使用方括号引用遍历得的键或
values()
方法返回值 - 通过
items()
方法遍历键和值#
修改字典
- 使用新的索引键并为其赋值,可以将项目添加到字典中
- 删除项目
pop()
方法删除具有指定键名的项目popitem()
方法删除最后插入的项目del
关键字,指定键名来删除对应项目del text["cchh"]
del
关键字或clear()
方法完全删除字典
复制字典
dict2 = dict1
只是dict2对dict1的引用,dict1中的更改会在dict2中进行copy()
方法复制myPM= thisPM.copy()
dict()
创建字典副本myPM = dict(thisPM)
嵌套字典
两种实现方式:
- 创建一个字典时包含创建许多字典
- 创建多个字典,再创建一个字典包含这些字典
循环判断语句
If Else语句
常用逻辑条件与其他语言类似
格式
-
条件语句后面接冒号
-
python依赖缩进,其他语言通过花括号实现的方式在这里要用空格来定义代码范围
if b > a: print("b is greater than a")
elif
相当于else if
if语句不能为空,无内容要用pass
while语句
同样,条件语句需要接冒号while i < 7:
continue
终止循环的当前迭代,并继续下一个
for语句
特点
for
循环用于迭代序列(即列表,元组,字典,集合或字符串)- 不需要预先设置索引变量
- 按顺序遍历列表
- 不能为空,无内容要用pass
常用搭配
-
range()
函数返回一个数字序列,默认从0开始,递增1 -
range(start,end,scan)
, scan为跳跃间隔,序列不包括end处值
else特殊用法
for
循环中else
指定循环结束时要执行的代码
函数
定义函数
def
关键字定义函数
def yinzi():
print("what's your ping")
需要函数返回值,用return
加对应内容
调用函数
调用函数为:函数名称后跟括号yinzi()
设置参数
- 定义时在函数名后的括号内指定参数,用逗号分隔
- 定义参数的时候也可以设置默认值
- 发送到函数的参数可以是任何数据类型,并且在函数内其被视为相同数据类型
关键字参数
- 使用key = value语法(关键字和值对应)时,参数顺序无关紧要
任意参数
- 不知道传递多少参数时,在函数定义的参数名前加*
- 函数可以接受一个参数元组,并相应地访问各项
lambda函数
是一种小的匿名函数,可接受任意数量的参数,但只能有一个表达式
基本语法
lambda arguments:expression
常用场合
- 作为另一个函数内的匿名函数
-
x = lambda a, b : a * b print(x(5, 6))
-
作为函数内的匿名函数
def myfunc(n): return lambda a : a * n mydoubler = myfunc(2) mytripler = myfunc(3) print(mydoubler(11)) print(mytripler(11))
数组
没有内置对数组的支持,用python列表代替(基本处理方法相同)
数组用于在单个名称下保存多个值,可以用索引号来访问这些值
类和对象
创建类
类是抽象的模板,实例是根据类创建出来的具体对象
- 用
class
关键字创建类 _init_()
函数- 所有类都有
- 用于将值赋给对象属性
- 用类创建新对象时都会自动调用
self
参数- 是对类的当前实例的引用,用于访问属于该类的变量
- 不必被命名为
self
,但必须是类中任意函数的首个参数
class Person: def __init__(self, name, age): self.name = name self.age = age def myfunc(self): print("Hello my name is " + self.name) p1 = Person("Bill", 63) print(p1.name) p1.myfunc()
继承
- 创建父类
任何类都可以是父类,因此创建语法相同 - 创建子类
在创建子类时将父类作为参数发送- 如创建名为Student的子类,将从父类Person继承属性和方法
class Student(Person): pass
pass
不会添加任何其他属性或方法
- 如创建名为Student的子类,将从父类Person继承属性和方法
- 添加
_init_()
函数- 为子类添加
_init_()
后,子类的_init_()
将覆盖对父类_init_()
的继承 - 如需保持对父类的
_init_()
的继承,添加对父类的_init_()
的调用
如Person为父类时class Student(Person): def __init__(self, fname, lname): Person.__init__(self, fname, lname)
- 函数定义中使用
super()
函数自动继承,不必使用父元素的名称class Student(Person): def __init__(self, fname, lname): super()._init_(fname,lname)
- 为子类添加
- 添加属性
创建子类对象时新加入的变量,应该在子类的_init_()
函数中提前声明对应参数 - 添加方法
在子类中添加的与父类中函数同名的方法,将覆盖
迭代器
- 对于可迭代的对象(Iterable)
列表、元组、字典和集合都是可迭代的对象- 迭代器
inter()
方法配合next()
方法 for
循环遍历
- 迭代器
- 创建迭代器
把对象/类创建为迭代器,必须为对象使用__iter__()
和__next__
方法
之后可以采用for
循环遍历
作用域
- 局部作用域
- 在函数内部创建的变量仅在该函数内部可用
- 使用
global
关键字使局部变量成为全局变量 - 用
global
关键字在函数内修改全局变量
- 在主体创建的变量是全局变量
- 对于函数内部和外部的同名变量,python会将它们视为两个单独的变量,可使用范围不同
模块
模块即包含一组函数的文件,可在程序中引用
- 创建模块
文件扩展名为.py
,如module.py
- 使用模块
import
语句,如import module
引用模块中函数的语法为import 文件名.函数名
使得不同模块的同名函数也可以正常引用 - 重命名模块
导入模块时使用as
关键词创造模块别名 - 导入部分部件
from
关键字导入部件,如module中导入person字典from module import person
from
关键字导入元素可以直接引用