默认编码为UTF-8,指定编码方式:
# -*- coding: encoding -*-
其中encoding表示为源码文件指定的编码。
python3中可以用中文作为变量名。
>>> import keyword
>>> 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']
·单行注释:以#开头
·多行注释:以’’’(三个单引号)或"""(三个双引号)作为开头和结尾(相当于一个多行字符串)
·python不使用大括号表示代码块,而是使用缩进,缩进不一致时会导致运行错误
·多行语句中使用’\'将多行语句并为一行,在[],{},()中的多行语句不需要使用反斜杠
import sys; x = 'runoob'; sys.stdout.write(x + '\n')
·输入:
input('请输入')
·输出:
print('Hello world') #换行输出
print('Hello world',end = "") #结尾符号为end的值
在 python 用 import 或者 from…import 来导入相应的模块。
将整个模块(somemodule) 导入,格式为: import somemodule
从某个模块中导入某个函数 ,格式为: from somemodule import somefunction
从某个模块中导入多个函数 ,格式为: from somemodule import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemodule import *
条件控制:if-elif-else
循环:while-else(CTRL+C可以中断无限循环), for int [range()]
循环中都可以存在else子句,当循环条件为false时执行,但使用break结束循环时不执行
pass是空语句,不做任何事情,一般用作占位语句保证结构的完整性
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
>>> list=[1,2,3,4]
>>> it = iter(list) # 创建迭代器对象
>>> print (next(it)) # 输出迭代器的下一个元素
1
>>> print (next(it))
2
#用for语句遍历
for x in it:
print (x, end=" ")
迭代器详情
·Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
·在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。
多个变量同时赋值:
a = b = c = 1 #将a、b、c赋值为1
a, b, c = 1, 2, "runoob"#将a赋值为1,b赋值为2,c赋值为"runoob"
1.type()
>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
2.isinstance()
>>> a = 111
>>> isinstance(a, int)
True
>>>
区别:type()不认为子类是一种父类类型,而isinstance()认为子类是一种父类类型。
del var
del var_a, var_b
·python3的标准数据类型有六个,分别是:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典)
·不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
·可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
包括int(整数,表示长整型,没有long),bool(布尔,true and false),float(浮点数),complex(复数)
>>> 5 + 4 # 加法
9
>>> 4.3 - 2 # 减法
2.3
>>> 3 * 7 # 乘法
21
>>> 2 / 4 # 除法,得到一个浮点数
0.5
>>> 2 // 4 # 除法,得到一个整数
0
>>> 17 % 3 # 取余
2
>>> 2 ** 5 # 乘方
32
ps1.在混合运算时,python会把整型转换成为浮点数
ps2.bool类型的false等于0,true等于1,可以用在数值计算中
ps3.海象运算符:=可在表达式内部为变量赋值(python3.8中可用)
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
ps4.‘//’运算得到整数,但不一定得到整型数据,具体数据类型由除数和被除数决定
ps5.在交互模式中,表达式的结果将被赋给变量‘_’
1.字符串包含在单引号/双引号中,用’’'或"""可以括多行字符串
word = '字符串'
sentence = "这是一个句子。"
paragraph = """这是一个段落,
可以由多行组成"""
2.转义符为’\’,使用r(即row)可以使反斜杠不发生转义
word = r"this is a line with \n"
同时反斜杠也可以作续行符使用
3.用‘+’连接字符串,‘*’表示重复当前字符串
print(str * 2) # 输出字符串两次
print(str + '你好') # 连接字符串
4.Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 (表示倒数第一个字符)开始。字符串截取:变量[头下标:尾下标:步长],取时左闭右开,第二个参数不存在时表示取到末尾,步长为负时逆向读取
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[2:5]) # 输出从第三个开始到第五个的字符
print(str[2:]) # 输出从第三个开始后的所有字符
print(str[1:5:2]) # 输出从第二个开始到第五个且每隔两个的字符
5.python中的字符串不能改变
字符串更新方式:切片拼接
var1 = 'Hello World!'
print ("已更新字符串 : ", var1[:6] + 'Runoob!')
#输出‘已更新字符串 : Hello Runoob!’
字符串相关
列表是python中使用最频繁的数据类型
1.列表中元素类型可以不同,支持数字、字符串,甚至可以包含列表(即嵌套)
2.列表写在方括号[]之间,用逗号分隔元素。
list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
tinylist = [123, 'runoob']
3.列表截取格式:变量[头下标:尾下标:步长],取时左闭右开,第二个参数不存在时表示取到末尾,步长为负时逆向读取
>>> a = ['hello','world']
>>> a[1::-1]
['world', 'hello']
>>>
4.列表和字符串一样可以用‘*’表示重复,用‘+’表示拼接
print (tinylist * 2) # 输出两次列表
print (list + tinylist) # 连接列表
5.列表中的元素可以改变
>>> a = [1, 2, 3, 4, 5, 6]
>>> a[0] = 9 #修改单个元素
>>> a[2:5] = [13, 14, 15] #修改多个元素
>>> a
[9, 2, 13, 14, 15, 6]
>>> a[2:5] = [] # 用来删除元素
>>> a
[9, 2, 6]
p.s.也可以用del来删除列表中某一元素
关于sort:reverse=False时升序排序,True时降序排序,默认升序排序。那个key没太看懂
1.元组写在小括号 () 里,元素之间用逗号隔开;元组中的元素类型也可以不相同。
2.元组中的元素不可以被修改,字符串可以看作一种特殊的元组。(可以用del语句删除整个元组)
p.s.所谓元组的不可变指的是元组所指向的内存中的内容不可变。将某一元组重新赋值的操作是允许的。
3.包含0或1个元素元组的定义:
tup1 = () # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号
集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员;基本功能是进行成员关系测试和删除重复元素。
1.可以用{}或set()函数创建集合,但创建空集合必须用set函数
parame = {
value01,value02,...} #创建集合,重复的元素会被自动去掉
parame0 = set(value) #创建集合parame0,其中value是一个序列
2.成员测试
sites = {
'Google', 'Taobao', 'Runoob', 'Facebook', 'Zhihu', 'Baidu'}
if 'Runoob' in sites :
print('Runoob 在集合中')
else :
print('Runoob 不在集合中')
#输出'Runoob 在集合中'
3.集合运算
a = set('abracadabra')
b = set('alacazam')
print(a) #输出{'b', 'c', 'a', 'r', 'd'}
print(a - b) #a和b的差集,输出{'r', 'b', 'd'}
print(a | b) #a和b的并集,输出{'b', 'c', 'a', 'z', 'm', 'r', 'l', 'd'}
print(a & b) #a和b的交集,输出{'c', 'a'}
print(a ^ b) #a和b中不同时存在的元素,输出{'z', 'b', 'm', 'r', 'l', 'd'}
列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。
键(key)必须使用不可变类型(数字、字符串、元组)。
在同一个字典中,键(key)必须是唯一的。
(相当于c++中的map)
dict = {
} #创建空字典的方法(创建空集合必须用set的原因)
dict['one'] = '1'
dict['two'] = '2'
#此时dict = {'one': 1, 'two': '2'}
tinydict = {
'name': 'runoob','code':1, 'site': 'www.runoob.com'} #创建非空字典
print (tinydict.keys()) # 输出所有键
print (tinydict.values()) # 输出所有值
tinydict['name'] = 8 # 更新 Age
tinydict['School'] = "aa" # 添加信息
del tinydict['name'] # 删除键 'name'
tinydict.clear() # 清空字典
del tinydict # 删除字典
#用构造函数dict创建字典
>>> dict([('Runoob', 1), ('Google', 2), ('Taobao', 3)])
{
'Runoob': 1, 'Google': 2, 'Taobao': 3}
>>> dict(Runoob=1, Google=2, Taobao=3)
{
'Runoob': 1, 'Google': 2, 'Taobao': 3}
>>>
#用循环创建字典
>>> {
x: x**2 for x in (2, 4, 6)}
{
2: 4, 4: 16, 6: 36}
1.string:‘blaba’/“blaba”,list:[‘a’,‘aa’,‘a’,1],tuple:(‘a’,‘aa’,‘a’,1),set:{‘a’,‘aa’,1},dictionary{‘a’:‘aa’,1:‘aa’}
2.list、tuple、string都属于sequence(序列),是有序的,通过偏移量调用,可以进行切片操作;set是无需的,且无重复元素;dictionary是无序的,元素为键值对,通过键来调用值
3.tuple和string是不可变的,set、list、dictionary是可变的
函数 | 描述 |
---|---|
int(x [,base]) | 将x转换为一个整数(base为进制数,默认等于10,不为10时x要以字符串形式输入) |
float(x) | 将x转换到一个浮点数 |
complex(real [,imag]) | 创建一个复数(real为数时生成real+imag*j,real为字符串时生成字符串对应的数如complex(”1+2j”) = (1+2j)) |
str(x) | 将对象 x 转换为字符串 |
repr(x) | 将对象 x 转换为表达式字符串(如,str = '1234’转化后,变为"‘1234’") |
eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象(好像就是把字符串按python规则算出来的意思) |
tuple(s) | 将序列 s 转换为一个元组 |
list(s) | 将序列 s 转换为一个列表 |
set(s) | 转换为可变集合 |
dict(d) | 创建一个字典。d 必须是一个 (key, value)元组序列。 |
frozenset(s) | 转换为不可变集合 |
chr(x) | 将一个整数转换为一个字符 |
ord(x) | 将一个字符转换为它的整数值 |
hex(x) | 将一个整数转换为一个十六进制字符串 |
oct(x) | 将一个整数转换为一个八进制字符串 |
x = 一个对象
s = 一个序列
d = 一个(key,value)元组序列
def 函数名(参数a,b,c……):
函数体
[return]
·必需参数
·关键字参数
·默认参数
·不定长参数(加*,将以元组形式引入,存放所有未命名的变量参数,加**则以字典形式引入)
传不可变对象:如数字、元组、字符串等,形参改变不影响实参
传可变对象:如列表、字典、集合等,形参改变影响实参
python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
·lambda 只是一个表达式,函数体比 def 简单很多。
·lambda的主体是一个表达式,而不是一个代码块。仅仅能在·lambda表达式中封装有限的逻辑进去。
·lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
·虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
举例:
# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
print ("相加后的值为 : ", sum( 20, 20 ))
Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。
在以下的例子中,形参 a 和 b 必须使用指定位置参数,c 或 d 可以是位置形参或关键字形参,而 e 或 f 要求为关键字形参:
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)