基本類型
1. Number類型
- 整數(shù): int
- 浮點(diǎn)數(shù): 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
/
表示將自動(dòng)轉(zhuǎn)化為浮點(diǎn)數(shù),而//
將進(jìn)行整除,只保留整數(shù)部分
10,2,8,16進(jìn)制
十進(jìn)制: 0,1,2,3...9
二進(jìn)制: 0,1
八進(jìn)制: 0,1,2,3...7
十六進(jìn)制: 0,1,2,3,...9,A,B,C,D,E,F
各進(jìn)制的表示與轉(zhuǎn)換
- 0b 表示二進(jìn)制
- 0o 表示八進(jìn)制
- 0x 表示十六進(jìn)制
0b10 //2
0b11 //3
0o10 //8
0o11 //9
0x10 //16
0x1F //31
- bin 轉(zhuǎn)換成2進(jìn)制
- int 轉(zhuǎn)換成10進(jìn)制
- hex 轉(zhuǎn)換成16進(jìn)制
- oct 轉(zhuǎn)換成8進(jìn)制
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的數(shù)都為True,空字符串,空數(shù)組,空對象都為False
復(fù)數(shù)
復(fù)數(shù)的表示方式: 36j
2. 字符串
表示字符串的方式: 單引號(hào),雙引號(hào),三引號(hào),三引號(hào)表示多行字符串
'''
hello world
hello world
hello world
'''
變成
'\nhello world\nhello world\nhello world '
將普通字符串變成原始字符串,不再進(jìn)行轉(zhuǎn)義
print(r'c:\northwind\northwest') // c:\northwind\northwest
字符串運(yùn)算
'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']
使用冒號(hào)以后得到的將會(huì)是一個(gè)列表
合并列表
['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
有一個(gè)特例
type((1)) // int
type(('hello')) // str
當(dāng)元組中只有一個(gè)元素的時(shí)候,IDLE將會(huì)把元組的括號(hào)當(dāng)做運(yùn)算
如何定義只有一個(gè)元素的元組?
(1,) // (1,)
type((1,)) // tuple
總結(jié)
str list tuple統(tǒng)稱為序列,他們都有序號(hào)
切片
['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
轉(zhuǎn)換ASCI碼
ord('w') //119
集合
集合是無序的,沒有下標(biāo)索引,因此不支持切片等序號(hào)操作
type({1,2,3,4,5,6}) //set
集合是不重復(fù)的
{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
字典不能有重復(fù)的key
{'q':'翻滾','w':'被動(dòng)','e':'釘','r':'大招'}['q'] // '翻滾'
字典的key和value類型
- value: str int float list set dict
- key: 必須是不可變的類型 int str tuple
變量
變量命名規(guī)則
可以使用字母數(shù)字下劃線,開頭不能是數(shù)字
保留關(guān)鍵字也不能作為變量名
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) //報(bào)錯(cuò) '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 引用類型.那么當(dāng)a = 1 b = a,b也被賦值為1, a = 3,那么a將變?yōu)?,但是b仍然是1,值類型是不可變的,如果變量發(fā)生了改變,將會(huì)賦值為一個(gè)新的值類型.引用類型則不同,當(dāng)引用類型改變的時(shí)候,a和b將同時(shí)發(fā)生變化.
a = 'hello'
id(a) //55299200 內(nèi)存地址
a = a + 'python'
id(a) //5536696 新的內(nèi)存地址
'python'[0] = 'a' //報(bào)錯(cuò),字符串是不可改變的類型
列表的可變與元組的不可變
>>> 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]
>>>
運(yùn)算符
算術(shù)運(yùn)算符
+ - * / // % **
賦值運(yùn)算符
= += *= /= **= //=
比較(關(guān)系)運(yùn)算符
== != > < >= <=
b = 1
b+=b>=1 //2
分析
b = b + b>=1
b = b + True
b = b + 1
b += 1
不只是數(shù)字才能作比較運(yùn)算
'a' > 'b' //False 97 > 98
'abc' < 'abd' //True
邏輯運(yùn)算符
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被認(rèn)為是False, 非0表示True
not 0.1 //False
在字符串中空字符串False,其他為True
not '' //True
在列表中空列表[]為False,其他為True.tuple set dict都遵循此原則
not [] //True
and 和 or 如何返回出來結(jié)果,要看能否把這個(gè)邏輯運(yùn)算的結(jié)果計(jì)算出來
1 and 0 //0
0 and 1 //0
1 and 2 //2
0 or 1 //1
1 or 0 //1
成員運(yùn)算符
in 和 not in 判斷一個(gè)元素是否在一個(gè)組里,返回的是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
在字典中的成員關(guān)系是key
b = 'a'
b in {'c' : 1} //False
b = 1
b in {'c' : 1} //False
b = 'c'
b in {'c' : 1} //True
身份運(yùn)算符
is 和 is not 同樣是返回bool
如果兩個(gè)變量取值相等,則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比較的是兩個(gè)變量的身份是否相等
is 是比較這個(gè)內(nèi)存地址是否相等,而==比較的是否值是否相等
例:
a = {1,2,3}
b = {2,1,3}
a == b //集合是無序 True
a is b //比較的是內(nèi)存地址 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
位運(yùn)算符
& 按位與 | 按位或 ^ 按位異或 ~ 按位取反 << 左移動(dòng) >> 右移動(dòng)
把數(shù)字當(dāng)做二進(jìn)制數(shù)進(jìn)行運(yùn)算
按位與
a = 2
b = 3
a & b //2
都為1時(shí)返回1
1 0
1 1
1 0
按位或
a = 2
b = 3
a | b //3
1 0
1 1
1 1
只有有1就返回1
表達(dá)式
乘除優(yōu)先級(jí)大于加減 not > and > or
開發(fā)環(huán)境和插件安裝
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在循環(huán)遍歷完成之后執(zhí)行
a = ['apple','orange','banana','grape']
for x in a:
print(x)
else:
print('fruit is gone')
break跳出循環(huán)
b = [1, 2, 3]
for x in b:
if x == 2:
break
print(x)
else:
print('EOF')
如果break跳出也不會(huì)執(zhí)行else
遍歷次數(shù)
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=' | ')
奇數(shù)輸出列表
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)
包,模塊,類
包
如果想將一個(gè)普通的文件夾變成一個(gè)包,那么需要在這個(gè)文件夾內(nèi)有
__init__.py
包的導(dǎo)入
import t.c7
print(t.c7.a)
改名
import t.c7 as m
導(dǎo)入具體的變量
from t.c7 import a
全部導(dǎo)入
from t.c7 import *
在c7中:
__all__ = ['a','b'] //全部導(dǎo)入時(shí)只導(dǎo)入a,b兩個(gè)變量
引入多個(gè)變量
from c9 import a, b, c
換行問題
from c9 import a, b,\
c
或者
from c9 import (a, b,
c)
避免循環(huán)導(dǎo)入和閉環(huán)導(dǎo)入模塊
__init__.py的用法
當(dāng)一個(gè)包含
__init__.py
的模塊被導(dǎo)入的時(shí)候,__init__.py
將會(huì)自動(dòng)執(zhí)行
控制包中模塊的引入
__all__ = ['c7']
模塊內(nèi)置變量
dir()
返回模塊中所有的變量
a = 2
b = 3
infos = dir()
print(infos)
其他內(nèi)置變量
'''
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__的經(jīng)典應(yīng)用
if __name__ == '__main__':
print('this is app')
print('this is a module')
黨作為模塊的時(shí)候只會(huì)輸出this is a module
,而作為入口文件將都會(huì)輸出
相對導(dǎo)入和絕對導(dǎo)入
頂級(jí)包和入口文件是同級(jí)的,而絕對路徑一定是從頂級(jí)包開始的.
在入口文件是不可以使用相對路徑的
絕對路徑導(dǎo)入
// main.py
import package2/package4.m2
相對路徑導(dǎo)入
// m2.py
from .m3 import m