目 录CONTENT

文章目录

Python基础

简中仙
2023-10-19 / 0 评论 / 0 点赞 / 78 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2024-02-08,若内容或图片失效,请留言反馈。 本文如有错误或者侵权的地方,欢迎您批评指正!

一、Python解释器

解释器说明
Cpython官方,C语言开发,最广泛的Python解释器
Ipython一个交互式、功能增强的Cpython
pypyPython语言写的Python解释器,JIT技术,动态编译Python代码
JythonPython的源代码编译成Java的字节码,跑在JVM上
IronPython与Jython类似,运行在.Net平台上的解释器,Python代码被编译成.Net的字节码
SatcklessPython的增强版本解释器,不使用CPython的C的栈,采用微线程(协成)概念编程,并发编程

二、基础语法

1、注释

#井号标注的文本

2、数字

1、整数int

Python3开始不再区分long、int,long被重命名为int,所以只有int类型了

进制表示:

  • 十进制10
  • 十六进制0xa
  • 八进制0010
  • 二进制0b10

2、bool类型

有2个值True、False

3、浮点数float

  • 1.2、3.1415、-0.12,1.46e9等价于科学计数法1.46*109
  • 本质上使用了C语言的double类型

4、复数complex

  • 1+2j或1+2]

3、字符串

  • 使用' "单双引号引用的字符的序列

  • "和""单双三引号,可以跨行、可以在其中自由的使用单双引号

示例:

a = 'abc'
print(a)
abc

b = 'abcd'
print(b)
abcd

c = "abc'de"
print(c)
abc'de

d = 'abc\'de'  # 反斜杠称为转义字符,使他不能成为当前默认意义
print(d)
abc'de

e = '''abcde'
fg'''
print(e)		# 三引号可以换行,当使用print函数打印时会自动换行
abcde'
fg

>>> '''abcde'
... fg'''
"abcde'\nfg"			# 控制台打印会输出换行符
  • r前缀:在字符串前面加上r或者R前缀,表示该字符串不做特殊的处理
  • f前缀:3.6版本开始,新增F前缀,格式化字符串

示例:

dir = 'c:/windows/nt'  # windows支持\/
print(dir)
c:/windows/nt

>>> d = 'c:\windows\nt'
>>> d
'c:\\windows\nt'		# \本义是转义符,在他前面加一个\,它就是指我就是反斜杠了

d = 'c:\windows\nt'  # \n代表换行
print(d)
c:\windows
t

e = 'c:\\windows\\nt'
print(e)
c:\windows\nt

f = r'c:\windows\nt'		# r前缀将字符串不转义
print(f)
c:\windows\nt

a = 'abc'
b = 123
c = f'{a}****{b}'			# f前缀,插值字符串
print(c)
abc****123

4、转义序列

  • \\ \t \n \' \"

  • 前缀r,把里面的所有字符当普通字符对待,则转义字符就不转义了。

转义:让字符不再是它当前的意义,例如\t,t就不是当前意义字符t了,而是被\转成了tab键

示例:

print("a\tb\nc\td e")			# \t \n space为不可见字符(空白字符),代表一个字符
a	b
c	d e

5、缩进

  • 未使用C等语言的花括号,而是采用缩进的方式表示层次关系
  • 约定使用4个空格缩进

6、续行

  • 在行尾使用\,注意\之后除了紧跟着换行之外不能有其他字符
  • 如果使用各种括号,认为括号内是一个整体,其内部跨行不用\

示例

a = 'abcdef' \
    'gh'
print(a)
abcdefgh

7、标识符

1、标识符

  • 1、一个名字,用来指代一个值
  • 2、只能是字母、下划线和数字
  • 3、只能以字母或下划线开头
  • 4、不能是python的关键字,例如def、class就不能作为标识符
  • 5、Python是大小写敏感的

标识符约定:

  • 不允许使用中文,也不建议使用拼音
  • 不要使用歧义单词,例如class_
  • 在python中不要随便使用下划线开头的标识符

2、常量

  • 一旦赋值就不能改变值的标识符
  • python中无法定义常量

3、字面常量

  • 一个单独的不可变量,例如12、"abc"、'2341356514.03e-9'

4、变量

赋值后,可以改变值的标识符

5、标识符本质

每一个标识符对应一个具有数据结构的值,但是这个值不方便直接访问,程序员就可以通过其对应的标识符来访问数据,标识符就是一个指代。一句话,标识符是给程序员编程使用的。

8、语言类型

img

python 是动态语言,强类型语言。

1、静态语言

  • 事先声明变量类型,之后变量的值可以改变,但值的类型不能再改变
  • 编译时检查

2、动态语言

  • 不用事先声明类型,随时可以赋值为其他类型
  • 编程时不知道是什么类型,很难推断

3、强类型语言

  • 不同类型之间操作,必须先强制类型转换为同一类型。print('a'+1)

4、弱类型语言

  • 不同类型间可以操作,自动隐式转换,JavaScript中 console.log(1+'a')

但是要注意的是,强与弱只是一个相对概念,即使是强类型语言也支持隐式类型转换。

例如

>>> type('1')
int
>>> type('abc')
str
>>> type(1 + 2)
int
>>> type(1 + 2.1 + True)		# int+ float => float 隐式类型转换
float

a = str(1) + 'a'			# 字符串的加法就是拼接,1无法直接和'a'相加,必须通过str(1)进行强制类型转换
print(a)
1a

9、进制

常见进制有二进制、八进制、十进制、十六进制。应该重点掌握二进制、十六进制。

十进制逢十进一;十六进制逢十六进一;二进制逢二进一

每8位(bit)为1个字节(byte)。

一个字节能够表示的整数的范围:

无符号数0~0XFF,即0到255,256种状态

有符号数,依然是256种状态,去掉最高位还剩7位,能够描述的最大正整数为127,那么负数最大就为-128。也就是说负数有128个,整数有127个,加上0,共256种。

特殊二进制数0b十进制十六进制0x
111
1133
11177
111115F
11111311F
111111633F
11111111277F
11111111255FF
100000000256100

二进制中最低位为1,一定是奇数;最低位为0,一定是偶数

特殊十六进制0x十进制
99
A10
D13
2032
3048
3149
4165
6197
7F127
FF255
FE254

10、码制

1、原码

  • 5=>0b101,1=>0b1,-1=>-0b1,bin(-1)
	二进制  十六进制 八进制
>>> bin(1),hex(1),oct(1)
('0b1', '0x1', '0o1')

2、反码

  • 正数的反码与原码相同
  • 负数的反码符号位不变其余按位取反

3、补码

  • 正数的补码与原码相同
  • 负数的补码符号位不变其余按位取反后+1
  • 补码的补码就是原码

4、负数表示法

  • 早期数字电路的CPU中的运算器实现了加法器,但是没有减法器,减法要转换成加法
  • 负数在计算机中使用补码存储,-1的补码为1111 1111
  • 5-1=>5+(-1)直觉上是0b101-0b1,其实计算机中是0b101+0b11111111,溢出位舍弃

11、False等价

对象/常量
" "
"string"
0
>=1
<=-1
()空元组
[]空列表
{}空字典
None

False等价布尔值,相当于bool(value)

例如

>>> bool(0.1), bool(-0.000001), bool(0.0000)
(True, True, False)
  • 空容器
    • 空集合set
    • 空字典dict
    • 空列表list
    • 空元组tuple
  • 空字符串
  • None
  • 0

12、逻辑运算真值表

image-20230309211136154

13、运算符Operator

1、算术运算符

  • +、-、*、/、//向下取整整除、%取模、**幂

注:在Python2中/和//都是整除。

示例:

>>> 1/2			# 除法
0.5
>>> 1//2		# 整除
0
>>> 2 ** 3		# 2的3次方
8
>>> 2**0.5		# 2的开方
1.4142135623730951

2、位运算符

  • &位与、|位或、^异或、<<左移、>>右移
  • ~按位取反,包括符号位
>>> 10 % 2, 10 % 3
(0, 1)
>>> 5 & 3, 5 | 3, 5 ^ 3
(1, 7, 6)
>>> 1 << 0, 1 << 1, 1 << 2
(1, 2, 4)
>>> 
>>> ~12
-13
>>> 10 ^ 9, 10 ^ -9
(3, -3)

3、比较运算符

==、!=、>、>=、<、<=

链式比较: 4 > 3 > 2

比较运算符,返回一个bool值,要求同类型比较

>>> 1 == 'abc', 'a' != 100
(False, True)

4、逻辑运算符

与and、或or、非not

逻辑运算符也是短路运算符

  • and 如果前面的表达式等价为False,后面就没有必要计算了,这个逻辑表达式最终一定等价为 False

  • or 如果前面的表达式等价为True,后面没有必要计算了,这个逻辑表达式最终一定等价为True 1 or False or None

  • 特别注意,返回值。返回值不一定是bool型

  • 把最频繁使用的,做最少计算就可以知道结果的条件放到前面,如果它能短路,将大大减少计算量

>>> 1 and 'abc'					# 把所操作的数值当做真或假来进行逻辑运算,完了之后返回的还是原来的值
'abc'
>>> 1 and 'xyz' and 0.0
0.0

5、赋值运算符

a = min(3, 5)

+=、 -= 、*=、/=、%=、//= 等

x = y = z = 10

6、成员运算符

in、not in

7、身份运算符

is 、is not

14、运算符优先级

运算符描述运算符描述
'expr'字符串转换x+y,x-y加,减
{key:expr,...}字典x<<y,x>>y移位
[expr1,expr2...]列表x&y按位与
(exprl,expr2,...)元组x^y按位异或
function(expr,...)函数调用xly按位或
x[index:index]切片x<y,x<=y,x==y,x!=y,x>=y,x>y比较
x[index]下标索引取值x is y , x is not y等同测试
x.attribute属性引用x in y , x not in y成员判断
~x按位取反not x逻辑否
+X,-X正,负x and y逻辑与
x**yx or y逻辑或
x*y,x/y,x%y乘,除,取模lambda arg,...:exprLambda匿名函数
  • 单目运算符 > 双目运算符
  • 算数运算符 > 位运算符 > 比较运算符 > 逻辑运算符
    • -3 + 2 > 5 and 'a' > 'b'
  • 搞不清楚就使用括号。长表达式,多用括号,易懂、易读

15、表达式

由数字、符号、括号、变量等的组合。有算数表达式、逻辑表达式、赋值表达式、lambda表达式等。

Python中,赋值即定义。Python是动态语言,只有赋值才会创建一个变量,并决定了变量的类型和值。

如果一个变量已经定义,赋值相当于重新定义。

三、内建函数

内建函数函数签名说明
printprint(value, ..., sep=' ',
end='\n')将多个数据输出到控制台,默认使用空格分隔、 \n换行
inputinput([prompt])在控制台和用户交互,接收用户输入,并返回字符串
intint(value)将给定的值,转换成整数。int本质是类
strstr(value))将给定的值,转换成字符串。str本质是类
typetype(value)返回对象的类型。本质是元
isinstanceisinstance(obj,class or tuple比较对象的类型,类型可以是obj的基类
print(1, 2, 3, sep='\n', end='***')			# 以换行作为分隔符,以***结尾
1
2
3***

type(1)  # 返回的是类型,不是字符串
type('abc')  # 返回的是类型,不是字符串
type(int)  # 返回type,意思是这个int类型由type构造出来
type(bool)  # 返回type,也是类型
type(str)  # 返回type,也是类型
type(type)  # 也是type

print(isinstance(1, int))  # True
print(isinstance(False, bool))  # True
print(isinstance(False, int))  # True

isinstance(True, (str, int, bool))  # True
type(1 + True)				<class 'int'>
type(1 + True + 2.0)  # 什么类型?<class 'float'>#即使是强类型语言,也会有隐式类型转换

四、数值型

  • int、float、complex、bool都是class,1、5.0、2+3j都是对象即实例
  • int:python3的int就是长整型,且没有大小限制,受限于内存区域的大小
  • float:由整数部分和小数部分组成。支持十进制和科学计数法表示。C的双精度型实现
  • complex:有实数和虚数部分组成,实数和虚数部分都是浮点数,3+4.2J
  • bool:int的子类,仅有2个实例True、False对应1和0,可以和整数直接运算

1、类型转换

  • int、float、complex、bool也可以当做内建函数对数据进行类型转换
  • int(x)返回一个整数
  • float(x)返回一个浮点数
  • complex(x)、complex(x,y)返回一个复数
  • bool(x)返回布尔值,前面讲过False等价的对象

2、整除

math模块的floor()、ceil()函数;内建函数int()、round();运算符//

# 整除,向下取整
print(3 // 2, 5 // 2, 7 // 2)
print(-3 // 2, -5 // 2, -7 // 2)
print(7 // 2, 7 // -2, -7 // 2, -(7 // 2))
1 2 3
-2 -3 -4
3 -4 -4 -3

# int 整数
print('int ------------')
print(int(1.4), int(1.5), int(1.6))
print(int(-1.4), int(-1.5), int(-1.6))
int ------------
1 1 1
-1 -1 -1

# ceil floor
print('ceil floor ---------------1')
import math										# 导入math模块使用
	
print(math.floor(2.5), math.floor(-2.5))		# floor作用是地板
print(math.ceil(2.5), math.ceil(-2.5))			# ceil作用是天花板
ceil floor ---------------1
2 -3
3 -2

# round	正好.5的时候找离他最近的偶数,四舍六入五取偶
print('round -------------')
print(round(1.4), round(-1.4), round(-1.6), round(1.6))
print(round(2.4), round(-2.4), round(2.6), round(2.6))
print('round  .5---------')
print(round(0.5), round(1.5), round(2.5), round(3.5))
print(round(-0.5), round(-1.5), round(-2.5), round(-3.5))
round -------------
1 -1 -2 2
2 -2 3 3
round  .5---------
0 2 2 4
0 -2 -2 -4
  • round(),四舍六入五取偶
  • math.floor()向下取整
  • math.ceil()向上取整
  • int()取整数部分
  • //整除且向下取整

3、常用数值处理函数

  • min()、max()
  • pow(x,y)等于x**y
  • math.sqrt()等于x**0.5
  • 进制函数,返回值是字符串
    • bin()、oct()、hex()
  • math模块
    • math.pi π
    • math.e自如常数
    • math模块中还有对数函数、三角函数等
print(max([1, 2, 3]))
print(min(['a', 'b', 'c']))
3
a

五、程序控制

  • 顺序
    • 按照先后顺序一条条执行
    • 例如,先洗手,再吃饭,再洗碗
  • 分支
    • 根据不同的情况判断,条件满足执行某条件下的语句
    • 例如,先洗手,如果饭没有做好,玩游戏;如果饭做好了,就吃饭;如果饭都没有做,叫外卖
  • 循环
    • 条件满足就反复执行,不满足就不执行或不再执行
    • 例如,先洗手,看饭好了没有,没有好,一会来看一次是否好了,一会儿来看一次,直到饭 好了,才可是吃饭。这里循环的条件是饭没有好,饭没有好,就循环的来看饭好了没有

1、单分支

if condition: 
    代码块
    
if 1 < 2:  # if True:
    print('1 less than 2')  # 代码块
  • condition必须是一个bool类型,这个地方有一个隐式转换bool(condition),相当于False等价
  • if 语句这行最后,会有一个冒号,冒号之后如果有多条语句的代码块,需要另起一行,并缩进
    • if、for、def、class等关键字后面都可以跟代码块
    • 这些关键后面,如果有一条语句,也可以跟在这一行后面。例如if 1>2: pass

2、多分支

if condition1: 
    代码块1
elif condition2: 
    代码块2
elif condition3: 
    代码块3
......
else:
    代码块

例如

a = 5
if a < 0:
    print('negative')
elif a == 0:  # 相当于 a >= 0
    print('zero')
else:  # 相当于 a > 0
    print('positive')
  • 多分支结构,只要有一个分支被执行,其他分支都不会被执行
  • 前一个条件被测试过,下一个条件相当于隐含着这个条件
# 嵌套 
a = 5
if a == 0:
    print('zero')
else:
    if a > 0:
        print('positive')
    else:
        print('negative')

3、while循环

while循环多用于死循环,或者不明确知道循环次数的场景

while cond: 
    block
 
while True: # 死循环 
    pass
 
a = 10
while a: # 条件满足则进入循环 
    print(a)
    a -= 1

4、for语句

for element in iteratable: # 可迭代对象中有元素可以迭代,进入循环体 
    block
 
for i in range(0, 10):  # 遍历,容器中所有的元素不重复的取一遍
    print(i)
内建函数函数签名说明
rangerange(stop) range(start, stop[, step])返回惰性的对象可以生成一个序列,遍历它就可以得到这个序列的一个个 元素/前包后不包
# 计数器
for i in range(0): 
    print(i)
print('---------')
 
for i in range(-2): 
    print(i) 
print('---------')
 
for i in range(1): 
    print(i)

range(i),i大于0,相当于计数器。

例如

打印1到10

for i in range(10):
    print(i + 1)
1
2
3
4
5
6
7
8
9
10

for i in range(1,11):
    print(i)

打印10以内的奇数

for i in range(0, 10):
    if i % 2 != 0:			# 或者if i % 2 == 1:,
        print(i)
1
3
5
7
9
        
for i in range(1, 10, 2): 
    print(i)   

打印10以内的偶数

for i in range(0, 10):
    if i % 2 == 0:
        print(i)
0
2
4
6
8
        
for i in range(0, 10, 2): 
    print(i)  

倒着打印10以内的奇数或偶

for i in range(8, -1, -2):
    print(i)
8
6
4
2
0

for i in range(9, 0, -2):
    print(i)
9
7
5
3
1    

打印2的0次寡到10次寡的值

for i in range(11):
    print(i, 2 ** i)
0 1
1 2
2 4
3 8
4 16
5 32
6 64
7 128
8 256
9 512
10 1024

5、continue

跳过当前循环的当次循环,继续下一次循环

for i in range(0, 10):
    if i % 2 != 0: continue
    print(i)
0
2
4
6
8
      
for i in range(10):
    if i % 2 != 0:
        continue
    print(i)
    
 
for i in range(10):
    if i & 1: continue
    print(i)

6、break

结束当前循环

练习:计算1000以内的被7整除的前20个正整数(for循环)

count = 0
for i in range(7, 1000, 7): 
    count += 1
    if count >= 20: 
    print(count, i) 
        break

总结:

  • continue和break是循环的控制语句,只影响当前循环,包括while、for循环
  • 如果循环嵌套,continue和break也只影响语句所在的那一层循环
  • continue和break 只影响循环,所以 if cond: break 不是跳出if,而是终止if外的break所在的循环
  • 分支和循环结构可以嵌套使用,可以嵌套多层。

7、else子句

如果循环正常结束,else子句会被执行,即使是可迭代对象没有什么元素可迭代

for i in range(0):  # 可迭代对象没有迭代
    pass
else:
    print('ok')
    
for i in range(0, 10):
    break
else:
    print('ok')
    
    
for i in range(0, 10):
    continue
else:
    print('ok')

有上例可知,一般情况下,循环正常执行,只要当前循环不是被break打断的,就可以执行else子句。 哪怕是range(0)也可以执行else子句。

7、三元表达式

在Python中,也有类似C语言的三目运算符构成的表达式,但python中的三元表达式不支持复杂的语句

真值表达式 if 条件表达式 else 假值表达式

三元表达式比较适合简化非常简单的if-else语句。

# 判断用户的输入的值,如果为空,输出"empty",否则输出该值
value = input('>>>')
if value:
    print(value)
else:
    print('empty')

value = input('>>>')
print(value if value else 'empty')
0

评论区