Python3入门(一)
前言:Python作为当下十分火热的一门编程语言,目前广泛应用于网络爬虫、数据分析、人工智能中,除此之外,这是一门十分优美的语言,需要我们在学习中细细品味。
一.基本数据类型
数字 (Number)
-
整数 int
-
浮点数 float(相当于其他语言的double)
-
bool 布尔类型(True/False 说明:非零数都为真,其他类型非空为真)
-
complex 复数
进制转换与类型检测
二进制
1 | 0b11 该行代码表示十进制的3(用0b表示二进制) |
八进制
1 | 0o11 该行代码表示十进制的9(用0o表示八进制) |
十六进制
1 | 0xA 该行代码表示十进制的10(0x表示十六进制) |
转换为二进制(bin方法)
1 | bin(10) 例子:将十进制10转换为二进制 |
转换为十进制(int方法)
1 | int(0xA) 例子:将十六进制A转换为十进制 |
转换为十六进制(hex方法)
1 | hex(100) 例子:将十进制100转换为十六进制 |
转换为八进制(oct方法)
1 | oct(0b11) 例子:将二进制11转换为八进制 |
使用type方法检测类型
1 | //注意事项 |
字符串 (str)
-
双引号和单引号均可表示
-
输入时字符串的换行(三单(双)引号)
1
2
3
4
5
6
7
8
9
10
11
12
13'''
hello world
Python is beautiful
'''
#上述代码运行结果:
'\nhello world\nPython is beautiful\n'
'hello\
world'
#上述代码运行结果:
'helloworld'
总结:若想换行输入而不被录入换行操作,可以用\+回车进行输入换行 -
转义字符
IDLE直接打印不会转义,print函数会转义
1
2
3
4
5
6
7
8
9
10
11
12
13
14print('hello \n world')
输出结果:
hello
world
print('hello \\n world')
输出结果:
hello \n world
print(r'hello \n world')
输出结果:
hello \n world
#总结:字符串前加 r ,变为原始字符串,不会进行转义 -
字符串的运算
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34"hello"+"world"
结果:
'helloworld'
"hello"*3
结果:
'hellohellohello'
#获得单个字符
"hello world"[6]
结果:
'w'
#截取字符串(注意截取末尾下标+1)
"hello world"[0:5]
结果:
'hello'
"hello world"[6:]
结果:
'world'
"hello world"[-2:]
结果:
'ld'
#删去字符串
"hello world"[0:-2]
结果:
'hello wor'
总结:切片 可以当做初始时光标在头部,括号里面的数字代表光标移动的次数
括号内都是负数时,左小右大;出现左负右正为空,可以左正右负
左边不填默认开头,右边不填默认结尾
列表 (list)
-
示例
1
2
3#区别于其他大部分语言,Python中组可以放置不同类型元素,例如:
[1,2,3,4,5]
["hello",1,false] -
读取列表元素
1
2
3
4
5
6
7
8
9
10
11["语文","数学","英语"][1]
输出结果:
'数学'
["语文","数学","英语"][-1:]
输出结果:
['英语']
注意:若使用截取的方式获取列表元素,得到的结果还是列表 -
列表的运算
1
2
3
4
5
6
7
8
9#加法
["123"]+["456"]
结果:['123','456']
#乘法
['hello']*3
结果:['hello','hello','hello']
#可用append()函数添加元素 -
列表元素检测
1
2
3
4
5
6
7
8
9
108 in [1,3,5,8]
结果:True
8 not in [1,3,5,8]
结果:False
len(["hello",1,2])
结果:3
#还可以用max,min函数 -
列表的排序
1
2
3li = [1,-3,5,-7,9]
li.sort(reverse=False) # [-7, -3, 1, 5, 9]
li.sort(reverse=True) # [9, 5, 1, -3, -7] -
找列表不同(使用表达式)
1
2
3
4
5
6
7
8
9
10# 找列表相同元素
l1 = [1,3,5,7]
l2 = [2,5,6]
[x for x in l1 if x in l2] # [5]
# 找列表不相同元素
l1 = [1,3,5,7]
l2 = [2,5,6]
l3 = [x for x in l1 if x in l2] # [5]
[x for x in l1+l2 if x not in l3] # [1, 3, 7, 2, 6]
元组 (tuple)
-
元素的访问
1
2(1,2,True)[2]
结果:True -
元组的运算与截取规则和列表基本一样,不过多阐述
-
与列表的区别:元组不可变,只可读
集合 (set)
-
无序,不重复
-
元素的访问
-
集合的运算
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#求两个集合差集
{1,2,3,4}-{1,2}
结果:{3,4}
#求交集
{1,2,3}&{3,4,5}
结果:{3}
#求并集
{1,2,3}|{3,4,5}
结果:{1,2,3,4,5}
#空集
set()
#可用add()函数添加元素
字典 (dict)
-
键值对的访问:键不可重复
-
key:不可变类型
-
value:几乎所有类型
1
2{'q':'新月打击','w':'苍白之瀑','e':'月之降临'}['w']
结果:'苍白之瀑' -
访问字典
1
2
3
4d = {'b':3, 'a':7, 'c': 6}
d.keys() # 获取字典键
d.values() # 获取字典值
d['a'] # 7 -
字典的排序
① 对键排序,返回键列表
1
2
3d = {'b':3, 'a':7, 'c': 6}
sorted(d.keys()) # ['a', 'b', 'c']
sorted(d.keys(), reverse=True) # ['c', 'b', 'a']② 对值排序,返回值列表
1
2
3d = {'b':3, 'a':7, 'c': 6}
sorted(d.values()) # [3, 6, 7]
sorted(d.values(), reverse=True) # [7, 6, 3]③ 对键或值排序,返回字典
1
2
3
4# 对键排序
dict(sorted(d.items(), key = lambda asd:asd[0], reverse = False)) # {'a': 7, 'b': 3, 'c': 6}
# 对值排序
dict(sorted(d.items(), key = lambda a:a[1], reverse = False)) # {'b': 3, 'c': 6, 'a': 7}
数据类型总结
-
可变类型:set(集合) list(列表) dict(字典)
-
不可变类型:Number(数字) str(字符串) tuple(元组)
-
关于可不可变:可用id()函数检测内存地址是否变化
二.变量与运算符
-
变量赋值举例
1
A = [1,2,3,4,5]
-
变量名规则
1
2
3字母、数字、下划线
区分大小写,注意保留关键字
开头不允许为数字 -
可变与不可变
1
2
3不可变:int、str、tuple
可变:list、set、dict
#可用id函数显示变量地址,检验变化后是否为原来地址 -
运算符(与C/Java等语言不同之处)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#除法(单、双斜杠区别)
3/2 = 1.5
3//2 = 1
#幂运算(2的n次方为例)
2**n
#身份运算符 (检查id)
is / is not
#成员运算符
in / not in
#逻辑运算符
not / and / or
#判断两个值类型 object classinfo
isinstance(5, int)
#没有自增、自减运算符
#ASCII码
ord('a') -
位运算符(将数字转换为二进制数进行运算,结果再转换为十进制数)
1
2
3
4
5
6&(按位与):每位二进制数进行比较,都为1结果为1,否则为0
|(按位或):每位二进制数进行比较,都为0结果为0,否则为1
^(按位异或)
~(按位取反)
<<(左移动)
>>(右移动) -
运算符优先级
1
逻辑运算符:not and or
-
思考
1
2
3
4
5
6
7
8
9
10
11a={1,2,3}
b={2,1,3}
c=(1,2,3)
d=(2,1,3)
a == b (true)
a is b (false)
c == d (false)
c is d (false)
注意:Python中并没有const修饰符,没有真正意义上的‘常量’,大家一般约定俗成:全大写变量当做常量使用
三.执行python文件的方法
-
文本编辑器执行python程序
1
2
3command/ctrl + S 打开IDLE自带文本编辑器
终端cd到文件所在目录,随后执行以下命令
python 文件名.py -
VS Code执行python程序
1
2Ctrl + ~:打开/关闭终端
或者安装Python拓展
四.分支、循环、条件、枚举
判断语句
-
if语句
1
2
3
4
5
6
7
8
9
10#与其他语言不同,采用缩进来替代语句块,例如:
if true :
print('right')
print('right-2')
#等同于Java/C中
if(true){
print('right')
print('right-2')
} -
if-else语句
1
2
3
4
5
6if condition :
...
elif :
...
else :
...
循环语句
-
while语句
1
2while condition :
... -
while / while else语句
-
while condition : ... else : ...
-
for / for else语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19a = ['a','b','c']
#案例1
for x in a :
print(x)
else :
print('done')
#案例2,输出0-9
for x in range(0,10):
print(x)
#案例3,输出0|2|4|6|8
for x in range(0,10,2):
print(x,end="|")
#案例4,切片
b = a[0:len(a):2]
print(b) -
break / continue:终止循环与跳过循环
五.包、模块与类
-
包下不同模块的区分(命名空间)
1
包名.模块名
-
标注包
1
2#在包内添加一个文件,名为
__init__.py -
导入包
1
2
3
4
5
6
7
8
9
10#方案一
import 包名.模块名
print(包名.模块名.变量名)
#方案二
import 包名.模块名 as m
print(m.变量名)
#方案三
from 包名.模块名 import 指定类/变量/方法 -
指定*域
1
__all__=['包名'或'变量名']
-
包的初始化
1
2利用包下的__init__.py文件
import该包,运行时会自动初始化 -
利用init批量导入包
1
2
3
4
5
6t包下__init__.py文件:
import 包名
t包外若想调用
import t
t.包名 -
包和模块是不会被重复导入的
-
导入一个模块便会执行模块内代码
六.函数
-
函数的定义
1
2
3
4
5
6
7
8
9
10
11
12
13#coding=UTF-8
import sys
sys.setrecursionlimit(10000) #设置最大递归次数
def add(x,y): #def 函数名(参数列表):
result = x+ #函数体
return result #若没有return默认返回None
def printCode(code):
print(code)
printCode(add(2,4)) -
接收函数返回多个参数
1
2
3
4
5
6
7
8def damage(skill1,skill2):
damage1=skill1*3
damage2=skill2*2+10
return damage1,damage2
skill1_damage, sill2_damage = damage(2,3) #序列解包
print(skill1_damage) -
序列解包与链式赋值
1
2a,b,c=1,1,1 #序列解包赋值
a=b=c=1 #链式赋值 -
必须参数与关键字参数
1
2
3
4
5def add(x,y): #必须参数
return x+y
result = add(y=1,x=2) #关键字参数,便于阅读
print (result) -
默认参数(必须放在必须参数后)
1
2
3
4
5def print_student_files(name,gender,age='18',college='天理'): #加入默认参数
print('我叫'+name)
print('我今年'+age+'岁')
print('我是'+gender+'生')
print('我在'+college+'上学')