Python入门
Python入门
基本
print()
函数
- 输出可以是数字
print(1220)
- 输出可以是字符串
print('candle')
,字符串需要用单引号或者双引号括起来 - 输出可以直接输出操作数之间的运算结果
print(12*20)
print()
函数有一个内置参数end
,使用print()
函数时默认end='\n'
,如果不想每次执行玩print()
函数后换行,可以修改end
的参数,比如print('*',end='')
,此时参数为空字符,就不会换行了
转义字符
即用反斜杠\
+字母实现某些功能
比如
- 输出特殊字符:
print('\'')
,需要在引号前加一个反斜杠表示转义 - 实现功能:
\n
换行\b
退格\r
将光标回到开头,光标之前的数据会被覆盖
也可以在字符串前加上r
,让字符串种的转义字符不起作用
比如print(r'hello\nworld')
会输出\n
编码与进制转换
ord()
函数用来返回单个字符的ASCII
码值,或者是unicode
数值
chr()
函数用来返回整数(0~255)的ASCII
符号
bin()
函数将其他数转换为二进制数
oct()
函数将其他数转换为八进制数
hex()
函数将其他数转换为十六进制数
int(number,type)
函数将其他进制转换为十进制,第一个参数填数字,第二格填进制类型
变量
定义上来说是数据的一个标签
candle=1220
变量由三个部分组成,分别是:
- 标识:表示对象所存储的内存地址,使用函数
id(obj)
获取 - 类型:表示对象的数据类型,使用函数
type(obj)
获取 - 值:表示对象所存储的具体数据,使用
print(obj)
可以直接输出
数据类型
int
整数类型
- 英文全称为
integer
,简写为int
,可以表示正负数
float
浮点数类型
- 由整数部分和小数部分组成,为了保证浮点运算的精度,可以导入
decimal
模块
bool
布尔类型
- 表示真or假的值,
True
表示真,数值为1,False
表示假,数值为0
str
字符串类型
- 称为不可变的字符序列,可以使用单引号,双引号,三引号定义
类型转换
为了将不同数据类型的数据拼接在一起,所以需要进行类型转换
int
之间的除法是会产生float
的,54/10=5.4
str()
函数可以将其他类型转换为str
类型,也可以直接用引号转换
int()
函数可以将其他类型转为int
类型,注意float
转换都int
时,会抹零
函数Input()
作用:接收来自用户的输入
返回值类型:输入值类型为str
,如果要进行运算请先转换
值的存储:设置一个变量
1 | candle=input('write something') |
input()
函数内可以写字符串,以提示信息
运算符
算术运算符
a=20,b=10
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 - 两个对象相加 | a + b 输出结果 30 |
- | 减 - 得到负数或是一个数减去另一个数 | a - b 输出结果 -10 |
* | 乘 - 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 200 |
/ | 除 - x除以y | b / a 输出结果 2 |
% | 取模 - 返回除法的余数 | b % a 输出结果 0 |
** | 幂 - 返回x的y次幂 | a**b 为10的20次方, 输出结果 100000000000000000000 |
// | 取整除 - 返回商的整数部分(向下取整) | 9//2=4 -9//2 =-5 |
比较运算符
以下假设变量a为10,变量b为20:
运算符 | 描述 | 实例 |
---|---|---|
== | 等于 - 比较对象是否相等 | (a == b) 返回 False |
!= | 不等于 - 比较两个对象是否不相等 | (a != b) 返回 True |
> | 大于 - 返回x是否大于y | (a > b) 返回 False |
< | 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量 True 和 False 等价 | (a < b) 返回 True |
>= | 大于等于 - 返回x是否大于等于y | (a >= b) 返回 False |
<= | 小于等于 - 返回x是否小于等于y | (a <= b) 返回 True |
is | 判断两个对象的标识是否一样 |
实际上,python
了提高内存利用效率对于一些简单的对象,如一些数值较小的int
对象,python
采取重用对象内存的办法,如指向a=2,b=2
时,由于2作为简单的int
类型且数值小,python
不会两次为其分配内存,而是只分配一次,然后将a
与b
同时指向已分配的对象,从而导致a is b =True
逻辑运算符
Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20:
运算符 | 逻辑表达式 | 描述 | 实例 |
---|---|---|---|
and | x and y | 布尔”与” - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值 | (a and b) 返回 20 |
or | x or y | 布尔”或” - 如果 x 是非 0,它返回 x 的计算值,否则它返回 y 的计算值 | (a or b) 返回 10 |
not | not x | 布尔”非” - 如果 x 为 True,返回 False 如果 x 为 False,它返回 True | not(a and b) 返回 False |
位运算符
按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:
下表中变量 a 为 60,b 为 13,二进制格式如下:
1 | a = 0011 1100 |
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
丨 | 按位或运算符:只要对应的两个二进位有一个为1时,结果位就为1。 | (a丨b)输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符:把”>>”左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
结构
对象的布尔值
Python中一切都是对象,所有对象都有一个布尔值
可以使用bool()
函数获取布尔值,以下对象的布尔值为False
- False
- 0
- 空字符串 空列表 空字典 空集合
if-else结构
1 | if 判断条件: |
当有多个值要判断时,可以使用if
的嵌套结构
1 | if 判断条件1: |
elif
是else if
的缩写
条件表达式
语法如下, 将if
和else
写到一行, 先执行condition_expr
, 若执行结果为True
则执行 expr1
, 执行结果为False
则执行expr2
m = a if a < b else b
range函数
用于生成一个整数序列,有三种创建方式
1 | range(10) #默认从0开始 [0,1,2,3,4,5,6,7,8,9] |
如果想要倒序输出,则将步长设置为-1,比如range(10,-1,-1)
,则实现了从10到0的倒序输出了
用 in
判断指定的整数是否在序列中,会返回True or False
print (9 in r) #返回值为 True
for in 循环
for循环可以遍历任何序列的项目,如一个列表或者一个字符串。
结构如下:
1 | for i in sequence: |
sequence
可以是一个range
函数,也可以是一个字符串或列表
如果循环体不需要使用自定义变量,那么可以写成下划线 “__”
break和continue
执行break
会跳出整个循环
执行continue
只会跳出这一次循环
列表
相当于是其他语言中的数组,线性结构存储数据
但是和其他语言不同的是,python
中的列表中元素,可以不是同一个数据类型
创建
中括号
lst=['candle','rainrain',1220,0420]
使用内置函数
list()
lst2=list(['candle','rainrain',1220,0420])
,list()
函数也可以把其他的数据结构转换为列表,比如lst=list(range(6))
本质上,列表list
存储的只是列表对象的地址,lst
存储的是列表的地址
1 | lst=['candle','rainrain',1220,420] |
特点
- 列表元素按顺序有序排序
- 索引映射唯一一个数据
- 列表可以存储重复数据
- 任意数据类型混合存储
- 根据需要动态分配和回收内存
访问
与字符串的索引一样,列表索引从 0 开始,第二个索引是 1,依此类推。
通过索引列表可以进行截取、组合等操作。
索引也可以从尾部开始,最后一个元素的索引为 -1,往前一位为 -2,以此类推。
使用下标索引来访问列表中的值,同样你也可以使用方括号 [] 的形式截取字符,参数为list[start:stop:step]
比如想输出第1到第5个元素,可以写成nums[0:5]
,默认步长为1
输出列表中奇数位元素,可以写成nums[1::2]
甚至可以用nums[::-1]
实现数组的逆序访问
寻找
可以简单地使用in
来判断元素是否在列表中,会输出True or False
print(candle in lst) #True
通过list.index(value)
方法查询
- 如果列表中存在N个相同元素,只返回第一个元素的索引
- 如果查询的元素不存在,则会抛出
ValueError
- 可以指定参数,在一定的范围内查找
增加
list.append(value)
方法
- 在列表的末尾添加一个元素
list.extend(seq)
方法
- 在列表的末尾至少添加一个元素,可以直接给列表添加另一个列表
lst1.extend(lst2)
list.insert(place,value)
方法
- 在列表的任意位置添加一个元素,前一个参数指定添加的位置,后一个参数指定要添加的元素
可以用切片的方法直接替换掉元素
- 比如
lst1[1:]=lst2
,执行该语句后,lst1
列表中第一个元素以后的数据都被lst2
所替换了
删除
list.remove(value)
的方法
- 从列表中移除一个元素,如果有重复元素,只移除第一个
list.pop(place)
的方法
- 从列表中移除指定位置的元素,如果没指定位置,会删除最后一个元素】
切片
- 可以直接用
lst[start:stop]=[]
的方法,将列表在(start,stop]
区间元素进行删除
list.clear()
的方法
- 直接删除列表中所有元素
排序
list.sort()
方法
- 可以实现列表元素内部的排序,默认是升序排列
- 可以添加参数,
list.sort(reverse=True)
,实现降序排列
sorted(seq)
函数
- 会产生一个新的列表对象,
newlist=sorted(list)
,也可以指定参数实现降序排序,newlist=sorted(list,reverse=True)
生成
语法格式为 newlist=[元素表达式 for 自定义变量 in 可迭代对象]
比如:
会在列表中生成[1,4,9..]
的序列
字典
定义
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示:
1 | d = {key1 : value1, key2 : value2, key3 : value3 } |
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字。
字典在计算机中是无序存放的,通过寻找key从而来找到value
创建
使用花括号
- 例如:
good={'candle':1220,'rainrain':420}
使用内置函数dict()
dict(name='candle',age=1220)
访问
直接输入键来访问值
print(good['candle']) #输出 1220
,如果查找的键不存在会报错
通过dict.get(key)
方法
print (good.get('candle'))
,如果查找的键不存在,会返回None
,也可以人为指定不存在时返回的默认值
修改
查询
- 可以使用
in
查询键是否在字典中存在
删除
- 使用
del dict[key]
来删除指定的键值对
添加
- 直接进行添加即可
good['new']='newnew'
遍历
获取key
- 使用
dict.keys()
方法可以获取字典中的所有key
- 可以使用
list()
内置函数将输出的key
转化为列表,lst=list(good.keys())
获取value
- 使用
dict.values()
方法可以获取字典中的所有value
获取key-value
对
- 使用
dict.items()
方法可以获取字典中所有的key-value
对
字典和range
函数,列表一样,都是一个可迭代的对象,可以用for...in...
结构遍历
1 | for item in good |
还可以同时遍历字典的key
和value
1 | for k, v in good.items(): |
生成
通过zip()
函数生成
语法格式为 newdict=[key表达式:value表达式 for key自定义变量:value自定义变量 in zip(可迭代对象)]
元组
定义
Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号 ( ),列表使用方括号 [ ]。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
元组中存储的是对象的引用
- 如果元组中对象本身不可变,则不能再引用其他对象
- 如果元组中的对象是可变对象,这可变对象的引用不允许改变,但数据是可变的,比如:假设元组里面有一个列表,则列表里面的数据是可以改变的
创建
使用小括号
a=('candle','rain')
使用内置函数tuple()
a=tuple(('candle','rain'))
只包含一个元组的元素需要使用逗号和小括号
a=('candle',)
不加逗号会被识别成字符串
遍历
元组是可迭代对象,所以可以用for ... in...
遍历
集合
集合(set)是一个无序的不重复元素序列。
集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。
某种意义上说,集合是没有value
的字典
创建
直接使用花括号{}
s={1,2,3,4}
使用内置函数set()
s=set(range(6))
,set()
函数也可以把其他的数据结构转换为集合,比如s=set(lst)
添加
set.add(key)
方法
- 一次可以添加一个元素,
s.add('candle')
set.update(seq)
方法
- 一次至少添加一个元素,可以添加一个列表之类的,
s.update(lst)
和列表是类似的
删除
set.remove(key)
方法
- 一次删除一个指定元素,如果不存在就异常
set.discard(key)
方法
- 一次删除一个指定元素,如果不存在也不会异常
set.pop()
方法
- 一次删除一个任意元素
关系
正如数学中的集合一样,python
中的集合有各种关系
相等
- 可以使用运算符== 判断
子集
- 调用
set.issubset(set)
方法判断,如果a.issubset(b)
是True
,那么a
是b
的子集
交集
- 调用方法
set.isdisjoint(set)
判断,如果有交集,会输出True
, - 调用方法
intersection()
可以直接返回集合的交集,或者用&
运算符,s1.intersection(s2)
等价于s1 & s2
并集
- 调用方法
set.union(set)
可以合并两个集合,相同元素会被舍弃,或者用|
运算符
差集
- 调用方法
set.difference(set)
可以出两个集合的差集,或者用-
运算符
数据结构总结
数据结构 | 是否可变 | 是否重复 | 是否有序 | 定义符号 |
---|---|---|---|---|
列表(list) | 可变 | 可重复 | 有序 | [ ] |
元组(tuple) | 不可变 | 可重复 | 有序 | ( ) |
字典(dict) | 可变 | key不可重复 | 无序 | {key:value} |
集合(set) | 可变 | 不可重复 | 无序 | { } |
字符串
字符串本身就是一个字符数组,这意味着你可以通过范围下标的方式来访问字符串的单个字符,比如
1 | s='candle' |
但是字符串是不可变类型,对字符串的修改会产生新的字符串对象,这点和列表不同
查询
str.index(str)
方法
- 查询子串
substr
第一次出现的位置,如果不存在,就抛出异常
str.rindex(str)
方法
- 查询子串
substr
最后一次出现的位置,如果不存在,抛出异常
str.find(str)
方法
- 查询子串
substr
第一次出现的位置,如果不存在,则返回-1
分割
str.split()
方法
- 从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表
print(s.split())
可以指定参数,比如
sep
参数,可以选择劈分的依据s.split(seq='|')
会以字符|
分界点进行分割split()
方法的返回结果是一个列表如果想要字符串分割成单独的字符,用
list()
方法就行了
替换与合并
str.replace(old,new)
方法
replace()
方法把字符串中的old
(旧字符串) 替换成new
(新字符串)
str.join(seq)
方法
- 将列表或元组中的字符串合并成一个字符串,效果是会在
seq
序列中间以str
为间隔
1 | s1='-' |
切片
和列表一样,字符串也可以通过切片的方式截取,遵循左闭右开的原则
比如print(s[1:5])
,会输出字符串第2个到第5个元素
格式化
使用花括号{}
字符串中可以用{ }作为占位符,里面输入整数作为次序,调用format方法,实现格式化字符串
1
2
3
4name='candle'
key='rain'
print('my name is {0},love {1}'.format(name,key))
#会输出 my name is candle,love rain
使用
f-string
在字符串之前加字符
f
,说明之后的字符串可以直接使用变量1
2
3name='candle'
key='rain'
print(f'my name is {name},love{key}')
函数
定义
1 | def name(parameter) : |
返回值
和其他语言不同的是,python
允许多个返回值,结果为元组
1 | def test(): |
参数
默认参数
函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递参数
def fun (a,b=10)
的意思是,如果只传一个参数,默认b=10
,如果传了两个参数,这b
的值被替换
1 | def fun (a,b=10): |
位置传参
如果想要将列表中的每个元素当做位置参数传入的话,如果在传入时加*
1 | def fun(a,b,c): |
如果不加*
会报错,因为相当于只传入列表的首地址,也就是第一个元素
关键字传参
如果想要将字典中的每个键值对当做位置参数传入的话,如果在传入时加**
1 | def fun(a,b,c): |
传入的键值对的键(key)必须是和函数参数对应的字符,否则会报错
个数可变的参数
定义函数时,如果无法事先确认传递的位置实参个数时,使用可变的位置参数,用*
定义
1 | def fun(*args): |
输出的结果都是 元组
个数可变的关键字参数
定义函数时,如果无法事先确认传递的关键字个数时,使用可变的关键字参数,用**
定义
1 | def fun(**args): |
输出的结果为 字典