基本类型
1. Number类型
- 整数: int
- 浮点数: float(双精度)
- 其他语言: 单精度(float) 双精度(double)
- 其他语言: short int long
type(1) // int
type(1.1) // float
type(1*1) // int
type(1+1.0) // float
type(1*1.0) // float
type(2/2) // float
type(2//2) // int
2/2 // 1.0
2//2 // 1
1//2 // 0
/
表示将自动转化为浮点数,而//
将进行整除,只保留整数部分
10,2,8,16进制
十进制: 0,1,2,3...9
二进制: 0,1
八进制: 0,1,2,3...7
十六进制: 0,1,2,3,...9,A,B,C,D,E,F
各进制的表示与转换
- 0b 表示二进制
- 0o 表示八进制
- 0x 表示十六进制
0b10 //2
0b11 //3
0o10 //8
0o11 //9
0x10 //16
0x1F //31
- bin 转换成2进制
- int 转换成10进制
- hex 转换成16进制
- oct 转换成8进制
10 -> 2
bin(10) //0b1010
8 -> 2
bin(0o7) //0b111
16 - > 2
bin(0xE) //0b1110
2 -> 10
int(0b111) //7
8 -> 10
int(0o77) //63
10 -> 16
hex(888) //0x378
2 -> 16
hex(0o7777) //0xfff
2 -> 8
oct(0b111) //0o7
布尔类型
T/F必须要大写
type(True) // bool
int(True) // 1
int(False) // 0
bool(2.2) // True
bool('abc') // True
bool('') // False
bool(None) // False
任何非0的数都为True,空字符串,空数组,空对象都为False
复数
复数的表示方式: 36j
2. 字符串
表示字符串的方式: 单引号,双引号,三引号,三引号表示多行字符串
'''
hello world
hello world
hello world
'''
变成
'\nhello world\nhello world\nhello world '
将普通字符串变成原始字符串,不再进行转义
print(r'c:\northwind\northwest') // c:\northwind\northwest
字符串运算
'hello' * 3 // hellohellohello
'hello world'[3] //l
'hello world'[-1] //d
'hello world'[0:4] //'hell'
'hello world'[0:5] //'hello'
'hello world'[6:10] //'worl'
'hello world'[6:11] //'world'
'hello world'[6:] //'world'
列表
type([1,2,3,4,5,6,7]) //list
type([[1,2],True,1,2]) //list
列表的基本操作
['num1','num2','num3','num4'][0] // num1
['num1','num2','num3','num4'][0:2] // ['num1','num2']
['num1','num2','num3','num4'][-1:] // ['num4']
使用冒号以后得到的将会是一个列表
合并列表
['num1','num2','num3','num4']+['num5','num6'] // ['num1','num2','num3','num4','num5','num6']
['num1','num2']*3 // ['num1','num2','num1','num2','num1','num2']
元组
(1,2,3,4,5)
(1,'-1',True)
(1,2,3,4)[0] // 1
type((1,2,3)) // tuple
有一个特例
type((1)) // int
type(('hello')) // str
当元组中只有一个元素的时候,IDLE将会把元组的括号当做运算
如何定义只有一个元素的元组?
(1,) // (1,)
type((1,)) // tuple
总结
str list tuple统称为序列,他们都有序号
切片
['num1','num2','num3','num4'][0:2] //['num1','num2']
如何判断3是否在[1,2,3,4,5]中
3 in [1,2,3,4,5] //True
3 not in [1,2,3,4,5] //False
长度
len([1,2,3,4,5]) //5
len('hello world') //11
大小
max([1,2,3,4,5]) //6
min([1,2,3,4,5]) //1
max('hello world') //w
min('hello world') //' '
min('helloworld') //d
转换ASCI码
ord('w') //119
集合
集合是无序的,没有下标索引,因此不支持切片等序号操作
type({1,2,3,4,5,6}) //set
集合是不重复的
{1,1,2,2,3,3,4,4} //{1,2,3,4}
常用操作
len({1,2,3}) //3
1 in {1,2,3} //True
1 not in {1,2,3} //False
{1,2,3,4,5,6} - {3,4} //{1,2,5,6}
{1,2,3,4,5,6} & {3,4} //{3,4}
{1,2,3,4,5,6} | {3,4,7} //{1,2,3,4,5,6,7}
定义空集合
type({}) // dict
type(set()) // set
字典
type({1:1,2:2,3:3,4:4}) // dict
字典不能有重复的key
{'q':'翻滚','w':'被动','e':'钉','r':'大招'}['q'] // '翻滚'
字典的key和value类型
- value: str int float list set dict
- key: 必须是不可变的类型 int str tuple
变量
变量命名规则
可以使用字母数字下划线,开头不能是数字
保留关键字也不能作为变量名
a = '1'
a = 1
a = 1
b = a
a = 3
print(b) //1
a = [1,2,3,4,5]
b = a
a[0] = '1'
print(a) //['1',2,3,4,5]
print(b) //['1',2,3,4,5]
值类型和引用类型
type = 1
type(1) //报错 'int' object is not callable
a = [1,2,3,4,5]
b = a
a[0] = '1'
print(a) //['1',2,3,4,5]
print(b) //['1',2,3,4,5]
int str tuple 值类型(不可改变) list set dict 引用类型(可变)
int 值类型 list 引用类型.那么当a = 1 b = a,b也被赋值为1, a = 3,那么a将变为3,但是b仍然是1,值类型是不可变的,如果变量发生了改变,将会赋值为一个新的值类型.引用类型则不同,当引用类型改变的时候,a和b将同时发生变化.
a = 'hello'
id(a) //55299200 内存地址
a = a + 'python'
id(a) //5536696 新的内存地址
'python'[0] = 'a' //报错,字符串是不可改变的类型
列表的可变与元组的不可变
>>> a = (1,2,3)
>>> a[0]
1
>>> a[0] = 22
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
a[0] = 22
TypeError: 'tuple' object does not support item assignment
>>> b = [1,2,3]
>>> b[0] = 444
>>> b
[444, 2, 3]
>>>
运算符
image.pngimage.png
算术运算符
+ - * / // % **
赋值运算符
= += *= /= **= //=
比较(关系)运算符
== != > < >= <=
b = 1
b+=b>=1 //2
分析
b = b + b>=1
b = b + True
b = b + 1
b += 1
不只是数字才能作比较运算
'a' > 'b' //False 97 > 98
'abc' < 'abd' //True
逻辑运算符
and or not 主要用来操作bool类型
>>> False and True
False
>>> False or True
True
>>> not False
True
>>> not not True
True
>>> 1 and 1
1
>>> 'a' and 'b'
'b'
>>> 'a' or 'b'
'a'
>>> not 'a'
False
0被认为是False, 非0表示True
not 0.1 //False
在字符串中空字符串False,其他为True
not '' //True
在列表中空列表[]为False,其他为True.tuple set dict都遵循此原则
not [] //True
and 和 or 如何返回出来结果,要看能否把这个逻辑运算的结果计算出来
1 and 0 //0
0 and 1 //0
1 and 2 //2
0 or 1 //1
1 or 0 //1
成员运算符
in 和 not in 判断一个元素是否在一个组里,返回的是bool
a = 1
a in [1,2,3,4,5] //True
b = 6
b not in [1,2,3,4,5] //True
b not in (1,2,3,4,5) //True
b not in {1,2,3,4,5} //True
在字典中的成员关系是key
b = 'a'
b in {'c' : 1} //False
b = 1
b in {'c' : 1} //False
b = 'c'
b in {'c' : 1} //True
身份运算符
is 和 is not 同样是返回bool
如果两个变量取值相等,则is返回True
a = 1
b = 2
a is b //False
a = 1
b = 1
a is b //True
a = 1
b = 1.0
a == b //True
a is b //False
值是否相等is不是比较值相等,is比较的是两个变量的身份是否相等
is 是比较这个内存地址是否相等,而==比较的是否值是否相等
例:
a = {1,2,3}
b = {2,1,3}
a == b //集合是无序 True
a is b //比较的是内存地址 False
c = (1,2,3)
d = (2,1,3)
c == d //元组是序列有序的,不可变 False
c is d //False
判断类型
a = 'hello'
isinstance(a,str) //True
isinstance(a,(str,int,float)) //True
位运算符
& 按位与 | 按位或 ^ 按位异或 ~ 按位取反 << 左移动 >> 右移动
把数字当做二进制数进行运算
按位与
a = 2
b = 3
a & b //2
都为1时返回1
1 0
1 1
1 0
按位或
a = 2
b = 3
a | b //3
1 0
1 1
1 1
只有有1就返回1
表达式
image.png乘除优先级大于加减 not > and > or
开发环境和插件安装
VSCode 插件
Python Terminal View In Browser Vim vscode-icons
条件控制语句
if
mood = False
if mood:
print('go to left')
else:
print('go to right')
elif
a = input()
if a == 1:
print('one')
elif a == 2:
print('two')
elif a == 3:
print('three')
elif a == 4:
print('four')
else:
print('other')
while
counter = 1
while counter <= 10:
counter += 1
print(counter)
else:
print('EOF')
for与for-else
a = ['apple','orange','banana','grape']
for x in a:
print(x)
else在循环遍历完成之后执行
a = ['apple','orange','banana','grape']
for x in a:
print(x)
else:
print('fruit is gone')
break跳出循环
b = [1, 2, 3]
for x in b:
if x == 2:
break
print(x)
else:
print('EOF')
如果break跳出也不会执行else
遍历次数
for x in range(0, 10):
print(x) //0,1,2,3,4,5,6,7,8,9
如果希望遍历的是2,4,6,8...
for x in range(0, 10, 2):
print(x, end=' | ')
递减
for x in range(10, 0, -2):
print(x, end=' | ')
奇数输出列表
a = [1, 2, 3, 4, 5, 6, 7, 8]
for i in range(0, len(a), 2):
print(a[i], end=' | ')
更好的方式
a = [1, 2, 3, 4, 5, 6, 7, 8]
b = a[0:len(a):2]
print(b)
包,模块,类
包
如果想将一个普通的文件夹变成一个包,那么需要在这个文件夹内有
__init__.py
包的导入
import t.c7
print(t.c7.a)
改名
import t.c7 as m
导入具体的变量
from t.c7 import a
全部导入
from t.c7 import *
在c7中:
__all__ = ['a','b'] //全部导入时只导入a,b两个变量
引入多个变量
from c9 import a, b, c
换行问题
from c9 import a, b,\
c
或者
from c9 import (a, b,
c)
避免循环导入和闭环导入模块
__init__.py的用法
当一个包含
__init__.py
的模块被导入的时候,__init__.py
将会自动执行
控制包中模块的引入
__all__ = ['c7']
模块内置变量
dir()
返回模块中所有的变量
a = 2
b = 3
infos = dir()
print(infos)
其他内置变量
'''
hello
'''
print('name:' + __name__)
print('package:' + __package__)
print('doc' + __doc__)
print('file:' + __file__)
wangyukundeMacBook-Air:python wangyukun$ python3 a1.py
name:c.c4
package:c
doc
hello
file:/Users/wangyukun/Desktop/python/c/c4.py
__name__的经典应用
if __name__ == '__main__':
print('this is app')
print('this is a module')
党作为模块的时候只会输出this is a module
,而作为入口文件将都会输出
相对导入和绝对导入
顶级包和入口文件是同级的,而绝对路径一定是从顶级包开始的.
在入口文件是不可以使用相对路径的
绝对路径导入
// main.py
import package2/package4.m2
相对路径导入
// m2.py
from .m3 import m
网友评论