当前位置:   article > 正文

Python基础学习笔记【廖雪峰】

Python基础学习笔记【廖雪峰】

1. 入门

Python语法采用缩进方式,以#开头的语句是注释,当语句以:为结尾时,缩进的语句视为代码块

Python是动态语言,其变量本身类型不固定。与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错,Java就属于静态语言

空值NonePython里一个特殊的值,None不能理解为0,因为0是有意义的,而None是一个特殊的空值

a = -1;
if a>=0:
    print(a)
else:       #冒号下相同缩进部分视为在同一个代码块
    print(-a)
    print("hello")
print("你好")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2. 输入输出

# 单引号引起来是字符串
print('Hello')		
# 逗号隔开输出不同内容,同时会自动填上一个空格
print('100+200=',100+200)		
# 若不想要空格可以在print最后添加参数sep='',默认情况sep=' '
print('100+200=',100+200,sep='')

num = 15
# 也可以使用这种方式进行格式化输出
print(f"num是{num}")	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
# input()是输入函数,输入结果放入name变量,python不需要手动定义类型
name = input();	
# 在提示语句后输入
name = input('请输入:');	
  • 1
  • 2
  • 3
  • 4

3. 数据类型和变量

计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。

3.1 整数

  1. Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1100-80800
  2. 计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9a-f表示,例如:0xff000xa5b4c3d2
  3. 对于很大的数,例如10000000000,很难数清楚0的个数。Python允许在数字中间以_分隔,因此,写成10_000_000_00010000000000是完全一样的。十六进制数也可以写成0xa1b2_c3d4

3.2 浮点数

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的

比如, 1.23 × 1 0 9 1.23\times 10^9 1.23×109 12.3 × 1 0 8 12.3\times 10^8 12.3×108 是完全相等的。浮点数可以用数学写法,如1.233.14-9.01

  • 对于很大或很小的浮点数,必须用科学计数法表示,把10e替代, 1.23 ∗ 1 0 9 1.23*10^9 1.23109 就是1.23e9,或者12.3e80.000012可以写成1.2e-5
  • 整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的,而浮点数运算则可能会有四舍五入的误差【详情请看计算机组成原理】

3.3 字符串

字符串是以单引号'或双引号"括起来的任意文本,比如'abc'"xyz"

  • 如果字符串内部既包含单引号''又包含双引号""怎么办?可以用转义字符\来标识,使特殊字符失去特殊含义

    s = 'I\'m \"OK\"!'
    # 输出:I'm "OK"!
    print(s)
    
    • 1
    • 2
    • 3
  • 转义字符\除了使特殊字符失去特殊含义,也能让部分字符得到特殊含义,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\

  • 如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义

    # 输出\t
    print(r'\t')	
    
    • 1
    • 2
  • 如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用'''...'''的格式表示多行内容

    # 输出 line1 line2 line3三行
    print('''line1
    line2
    line3''')
    
    • 1
    • 2
    • 3
    • 4

3.4 布尔值

布尔值和布尔代数的表示完全一致,一个布尔值只有TrueFalse两种值,要么是True,要么是False,在Python中,可以直接用TrueFalse表示布尔值,也可以通过布尔运算计算出来

  • 布尔值可以用and【与】or【或】not【非】计算

    # 输出False
    print(True and False)		
    # 输出True
    print(not False)		
    # 输出False
    print(17 > 18)				
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

3.5 常量

常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量

PI = 3.14159265359
  • 1

但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法

  • /除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数
  • 还有一种除法是//,称为地板除,结果只保留整数部分
# 输出为 3.0
print(9 / 3)	
# 输出为 3
print(10 // 3)	
  • 1
  • 2
  • 3
  • 4

3.6 理解变量在内存中的表示

a = 'ABC'
b = a
a = 'XYZ'
# 最终输出ABC
print(b)		
  • 1
  • 2
  • 3
  • 4
  • 5
  • a赋给b时,实际上是b指向了a此时指向的常量数据ABC
  • 由于b本质指向的是数据,因此随后a指向了新数据后并不会影响b的指向
  • 因此b最终指向的依然是ABC

4. 字符串

Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes

4.1 编码

在操作字符串时,我们经常遇到strbytes的互相转换。为了避免乱码问题,应当始终坚持使用UTF-8编码对strbytes进行转换。

# ord()函数获取字符的Unicode编码
# 输出65【英文字符上Unicode编码与ASKII码一致】
print(ord('A'))		
  • 1
  • 2
  • 3
# chr()函数把编码转换为对应的字符
# 输出a,因为97对应的是a
print(chr(97))		
  • 1
  • 2
  • 3
# 如果知道字符的整数编码,也可以直接用十六进制写
# Unicode编码对应'中文',因此输出'中文'两个字
print('\u4e2d\u6587')	
  • 1
  • 2
  • 3
# Python对bytes类型的数据用带b前缀的单引号或双引号表示
# 此时x存放的是bytes类型
x=b'ABC'	
  • 1
  • 2
  • 3
# 通过encode()方法可以编码为指定的bytes
# 将字符串转换为ASKII码对应的bytes存储
print('ABC'.encode('ascii'))	
# 将字符串转换为UTF-8码对应的bytes存储
print('中文'.encode('UTF-8'))	   
  • 1
  • 2
  • 3
  • 4
  • 5
# 通过decode()方法可以将bytes按照指定方式解码
# 以ASKII码的方式解释字节流,输出ABC
print(b'ABC'.decode('ascii'))	
# 如果bytes中只有一小部分无效的字节,可以传入errors='ignore'忽略错误的字节,如下
# 只输出'中',因为另一个字节码在utf-8编码情况下不对应任何字符
print(b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4.2 其他方法

4.3 格式化

%运算符用来格式化字符串。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略

如果不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串

字符串里面的%是一个普通字符时需要转义,用%%来表示一个%

# 输出'Hello, world'
print('Hello, %s' % 'world')	
# 输出'Hi, Michael, you have $1000000.'
print('Hi, %s, you have $%d.' % ('Michael', 1000000))
  • 1
  • 2
  • 3
  • 4

5. 数据结构

5.1 链表 list

Python内置的一种数据类型是list,可以随时添加和删除其中的元素,将其理解为链表即可,同时Python中的list更加强大,内部可以存放不同类型的元素

# 创建一个list
classmates=['tom','jack','mike']	
# 用下标进行访问,输出tom
print(classmates[0])	
# 负的下标代表倒数第几个,此处输出mike
print(classmates[-1])	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
p = ['asp', 'php']
# 此时s[2][1]等价于p[1]
s = ['python', 'java', p, 'scheme']	
  • 1
  • 2
  • 3

list方法

# append方法将元素追加至末尾
append('martin')	
# insert方法将元素插入指定索引位置
insert(0,'linda')	
# pop()方法删除末尾元素,也可删除指定索引元素
pop()				
# 移除符合要求的第一个值
remove('xxx')	
# 连接两个列表,这是比+运算符连接效率更高的方法
extend(list)		
# 统计num在list中出现的次数
count(num)	

# 某个元素在不在列表中,返回布尔型
element in/not in listname		

list(reversed(range(5)))	# 生成一个倒序列表[4,3,2,1,0]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
# 二分搜索以及已排序列表的插值【bisect本身不检查列表是否有序】
import bisect
c=[1,2,2,2,3,4,7]
# 返回元素2在c中应当插入的位置
bisect.bisect(c,2)   
# 把元素2插入应当插入的位置
bisect.insort(c,2)   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

5.2 静态链表 tuple

tuple一旦初始化就不能修改【所谓“不变”是说每个元素指向永远不变】,这是其与list的唯一区别

# 当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来
t = (1, 2)	
# 定义一个空的tuple
t = ()			
# 只有1个元素的tuple定义时必须加一个逗号,否则会与数学中的小括号歧义
t = (1,)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
# tuple和list还具有拆包特性
seq=(1,2,3,4)		
# 将1赋值给a,将2赋值给b,剩余部分成为列表放入rest
a,b,*rest=seq	
  • 1
  • 2
  • 3
  • 4

5.3 字典 dict (map)

# 定义key-value
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}	
# 取出键值对应的值
d['Michael']	 
# 放入键值对
d['Adam'] = 67    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

dict方法

# 当键值不存在于字典中时会报错,因此取值前最好进行判断
# 若此时不存在这样的键值则返回False
'Thomas' in d	
# 若当前键值对不存在则返回None
d.get('Thomas')		
# 当键值对不存在时返回-1
d.get('Thomas', -1)	
# 删除键值对
d.pop('Bob')		
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

5.4 集合 set

set的原理与dict一致,不过其只存储key

# 得到一个空集合
s=set()				
# set的赋值初始化需要list作为输入集合
s=set([1, 2, 3])	
  • 1
  • 2
  • 3
  • 4

set方法

# add方法往集合添加元素
s.add(4)		
# remove方法移除集合中的元素
s.remove(4)		
# 得到交集
s1 & s2			
# 得到并集
s1 | s2			
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

6. 基础用法

6.1 条件判断

Python的条件判断是不需要小括号括起来的,同时由于其依靠相同缩进代表同一代码块,因此也无需中括号

age = 3
#只要age是非零数值、非空字符串、非空list等,就判断为True,否则为False
if age >= 18:			#不要少写冒号
    print('adult')
elif age >= 6:			#else if在此处缩写为elif
    print('teenager')
else:
    print('kid')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

6.2 循环

# 定义一个list
nums=[1,2,3]	
# for的用法,不要忘了冒号:,while循环同样需要冒号
for x in nums:	
    # x是nums中的元素
    print(x)

# Python内置的enumerate函数可以把一个list变成[索引-元素]对,这样就可以在for循环中同时迭代索引和元素本身
for i, value in enumerate(['A', 'B', 'C']):
    # i即此元素在list中的下标
    print(i, value)		
    
# 也可以同时引用多个变量,此时就像是有多个索引进行遍历 
for x, y in [(1, 1), (2, 4), (3, 9)]:
    print(x, y)  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

6.3 赋值

# 后边的部分先得到,接着按顺序赋值
a, b = b, a + b
# 上述赋值语句等价于
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/539790
推荐阅读
相关标签