Python

基本类型

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
image.png

变量

变量命名规则

可以使用字母数字下划线,开头不能是数字
保留关键字也不能作为变量名

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.png

image.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

表达式

乘除优先级大于加减 not > and > or

image.png

开发环境和插件安装

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

函数

推荐阅读更多精彩内容

  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 12,679评论 15 381
  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 2,779评论 1 44
  • 第六章:数字 第七章:序列,列表,元组 1.序列 序列类型有着相同的访问模式:它的每一个元素可以通过指定一个偏移量...
    m风满楼阅读 220评论 0 2
  • 沿途中漫山遍野的油菜花 一片片闪过火车的尾巴 这个季节油菜都开花了 而我还是一个人…… 看着沿途的风景…… ...
    蘇欠阅读 25评论 0 1
  • 为什么天天这么晚都睡不着,是想的太多,还是白天睡多了,一直想改都改不了熬夜的习惯
    笑笑香心阅读 22评论 0 0