Python基础入门
1、Python简介
Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python 由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。像 Perl 语言一样, Python 源代码同样遵循 GPL(GNU General Public License) 协议。官方宣布,2020 年 1 月 1 日, 停止 Python 2 的更新。Python 2.7 被确定为最后一个 Python 2.x 版本。
import thisPython is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python’s elegant syntax and dynamic typing, together with its interpreted nature, make it an ideal language for scripting and rapid application development in many areas on most platforms.
2、环境搭建
- Python下载与安装、path环境变量配置、Python解释器.
- IDLE交互式模式,代码初体验.
- 命令行模式
python test.py
运行Python代码. - 推荐使用 VS Code文本编辑器 进行编码.
# 命令行模式执行.py代码
print(2**10)
# 测试IO
name = input('请输入你的名字:')
print('你的名字是:', name)
print('100+200', 100+200)
3、语法基础
- 使用“缩进”,建议使用4个空格的Tab缩进,避免Tab和空格滥用.
- 冒号后面的行缩进,表示代码块。
4、数据类型
1)整数
- 十进制写法,十六进制写法,运算永远是精确了。
- 整数没有大小限制。
2)浮点数
- 小数点写法,科学计数写法,运算可能会四舍五入。
- 浮点数也没有大小限制,但是超出一定范围就直接表示为inf(无限大)。
# 整数
a1 = 100
# 浮点数
a2 = 3.14
3)字符串
- 使用单引号或者双引号
- 特殊字符使用转义字符处理
- r'...' 表示不进行转义
- '''...''' 表示多行文本内容
# 冒号后面的行,表示代码块
if a > 100:
print('Yes')
else:
print('No')
print('I\'m OK!')
print(r'\\\t\n\r\\')
print('''
青青园中葵,
朝露待日晞。
阳春布德泽,
万物生光辉。
''')
print(r'''
\\\r
\\\n
\\\t
''')
4)布尔值(注意大小写) True、False
- and 与运算
- or 或运算
- not 非运算
# 布尔值与布尔运算
print(True and True)
print(True and False)
print(False and False)
print(True or False)
print(False or True)
print(not True)
print(not False)
5)空值 None
6)Python还提供了列表、字典等多种数据类型
5、变量与常量
- 变量的命名规范
- 大小写敏感
- = 表示赋值
- python是动态语言,变量的值及其数据类型可以动态改变
- 约定俗成,常量名的所有字母都大写,
PI = 3.1415926
。
6、三种除法
- / 除法,结果永远是浮点数
- // 地板除,结果取整数部分,永远是整数
- % 取余,结果取余数,永远是整数
Python中的整数运算永远是精确的。
# 变量与除法
print(10 / 3) // 3.33333333335
print(10 // 3) // 3
print(10 % 3) // 1
7、字符串与编码规范
搞清楚ASCII、Unicode和UTF-8 三才之间的关系。在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。最新的Python3版本中,字符串是以Unicode编码的。
- bytes类型的写法: b'hello world'
- ord() / chr() 数字与字符串之间相互转化
- encode() 把字符串转化成bytes字节
- decode() 把bytes字节转化成字符串
- len() 返回字符串的长度,返回bytes类型的字节数
为了避免乱码问题,应当始终坚持使用UTF-8编码对string和bytes进行转换。
.py 文件开头写上如下两行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
- 第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
- 第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
print(ord('A')) # 获取字符串的数字表示
print(ord('中'))
print(chr(66)) # 获取数字所对应的字符串
print(chr(25991))
print('\u4e2d\u6587') # 数字还可以用十六进制表示
print('----------------------------')
print('ABC'.encode('ascii'))
print(b'ABC'.decode('ascii'))
print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8'))
print(len('hello world'))
# 1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。
print(len(b'hello world'))
print(len('你好世界'.encode('utf-8')))
8、格式化输出
- %d 替换整数
- %f 替换浮点数
- %s 替换字符串
- %x 替换十六进制数
- 还可以 format() 方法来格式化字符串
print('%2d - %02d' % (3,1))
print('Age: %s, Gender: %s' % (25, True))
9、list类型
- 语法: arr = [1,2,3]
- list是一种可变的有序表,类似JS中的数组。
- 不同的是,list类型的索引号还可以负数,比如 list[-1] 表示list中倒数第一个元素。
- 常用API: len() / pop() / append() / insert()
classmates = ['赵一', '王二', '张三', '李四']
print(classmates)
print(len(classmates))
print(classmates[0], classmates[3])
print(classmates[-1], classmates[-4])
classmates.append('杨五')
print(classmates[-1])
classmates.insert(1, 'Jack')
classmates.pop()
classmates.pop(0)
classmates[1] = 'Bob'
classmates.append(True)
classmates.append(200)
classmates.append([1,2,3,4])
print(classmates)
print(classmates[-1][-1])
classmates = []
print(classmates, len(classmates))
10、tuple类型
- 语法: arr = (1,2,3)
- 元组,另一种有序列表,tuple和list非常类似,但是tuple一旦初始化就不能修改。
- 它也没有append(),insert()这样的方法。
- 因为tuple不可变,所以代码更安全。
tup = (1,2,3)
print(tup)
print(tup[0], tup[-1])
tup = () # 空的tuple
tup = (1,) # 只有单个元素的tuple, 避免与 () 小括号产生歧义
print(tup, tup[0], tup[-1])
# 当 tuple元素是list类型时,这个list元素是可变的
tup = (1,2, [3,4])
tup[-1][0] = 300
tup[-1].append(5)
print(tup)
11、条件语句
- if 语句:if / elif / else
- 非零数值、非空字符串、非空list等,就判断为True,否则为False。
birth = input('请输入你的出生年:')
birth = int(birth) # 字符串转成整型
if birth > 2000:
print('00后')
else:
print('00前')
12、循环语句
- for...in 循环
- while 循环
- break 跳出循环
- continue 结束当前次循环,开始下一次循环
- range(x) 生成 [0,x) 区间的整数
- list() 把 [0,x) 转化成 0~x 的数组
# for...in 循环
nums = [1,2,3,4,5]
for num in nums:
print('----', num)
sum = 0
for num in [10,20,30,40,50,60,70,80,90,100]:
sum += num
print('sum: %d' % (sum))
# range(x) 生成 [0,x) 区间的整数
# list() 把 [0,x) 转化成 0~x 的数组
print(range(5))
print(list(range(5)))
total = 0
for num in range(100):
total += num
print('总和为:%d' %(total))
# while 循环
all = 0
n = 99
while n > 0:
all += n
n -= 2
print('求100以内的奇数之和:%d' %(all))
# break 提前退出循环
m = 1
while m < 100:
# 当 m 大于10时,退出当前循环
if m > 10:
break
print(m)
m += 1
# continue 跳出当前的这次循环,开始下一次循环
for num in (1,3,5,7,9):
# 当 num = 5时,不会被打印
if num == 5:
continue
print(num)
13、dict字典
Python内置了字典,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
dict内部存放的顺序和key放入的顺序是没有关系的。dict的key必须是不可变对象,在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key。
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
# dict字典
d = { 'a': 1000, 'b': 2000, 'c': 3000 }
d['d'] = 4000
d['e'] = 5000
# 一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值覆盖
d['e'] = 6000
print(d['a'], d['e'])
# 判断字典中,是否存某个key
if 'e' in d:
print('key e 存在')
if 'm' in d:
print('key m 存在')
else:
print('key m 不存在')
# pop() 删除字典中的一个key
d.pop('a')
print(d)
# get() 获取一个key所对应的value
db = d.get('b')
print(db)
14、set集合
- set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
- set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作
- set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象。
# 要创建一个set,需要提供一个list作为输入集合
s = set([1,3,5,7,9, 7, 5, 3, 1])
# 重复的,会被过滤掉
print(s)
s.add(11) # 添加
s.add(13)
print(s)
s.remove(9) # 删除
r = set([1,2,3,4,5])
# 交集
sr1 = s & r
print(sr1)
# 并集
sr2 = s | r
print(sr2)
15、不可变对象
- 字符串和数字是不可变对象,list是可变对象。
- 要想理解“不可变对象”这一概念,要从变量在内存中的存储结构来研究。
参考资源:
1、廖雪峰Python教程
2、Python官方文档
END