Python3—笔记
Python3—笔记
目录
一、Python概述
1.1 代码编写方式:
- 交互式
- 全部编辑好后运行
1.2 作用域
默认使用 ‘缩进’ 来区分代码 属于哪部分
1.3 注释
# 这是单行注释
'''
这是多行注释,实际上是一个字符串
'''
1.4 输入——input()
# 括号内为提示信息,输入的信息存储在变量 name 中
#注意:input()输入的实际上是字符串,若要输入数字进行运算,可以使用强制转换
name = input('请输入你的姓名')
# 强制转换:
#第1种方法(适用于所有类型):
age = input('输入年龄')
newAge = int(age)+1
#第2种方法(适用于数值类型,eval()实际上是将字符串强行作为数字使用,相当于去掉引号):
age = input('输入年龄')
newAge = eval(age)+1
1.5 输出——print()
#单个字符串
print("hello world")
#多个字符串,print()会依次打印每个字符串,遇到逗号“,”会输出一个空格
print('The quick brown fox', 'jumps over', 'the lazy dog')
#输出 计算结果
print(100 + 200)
1.6 数据类型
注意: 整数 和 浮点数 在计算机内部存储的方式是不同的,整数 运算永远是精确的(除法也是精确的),而浮点数 运算则可能会有四舍五入的误差。
1.6.1 int
#十进制
123,-123,200
#十六进制 用0x前缀和0-9,a-f表示
0xff00,0xa5b4c3d2
#对于很大的数,例如10000000000,很难数清楚0的个数。Python允许在数字中间以_分隔,因此,写成 10_000_000_000 和 10000000000 是完全一样的。十六进制数也可以写成 0xa1b2_c3d4
1.6.2 float
# 对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,
1.23x10^9 就是 1.23e9,
# 12.3e8 ,0.000012 可以写成 1.2e-5
1.6.3 str
#使用单引号或者双引号包裹
'你好'
"你好"
# 如果字符串内需要有单引号:外面用双引号
" I'm a boy "
# 如果字符串内需要有双引号:外面用单引号
' I am a "boy" '
# 如果字符串内需要有 单引号和双引号 :使用转移字符\
' I\'m \"OK\"! ' 表示 I'm "OK"!
#如果字符串很长,需要换行:使用三引号
print('''line1
line2
line3''')
1.6.4 bool
# 布尔值只有True、False两种值,布尔值可以用and、or和not运算
>>> True and True
True
>>> True and False
False
>>> False and False
False
>>> 5 > 3 and 3 > 1
True
1.6.5 None 空值
1.6.6 list (有序列表)
'''
list有以下几个特点:
查找和插入的时间随着元素的增加而增加;
占用空间小,浪费内存很少。
'''
# list的格式(list中的元素的 数据类型 可以不同,甚至可以是1个list)
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
# 使用len() 获取list长度
>>> len(classmates)
3
# 使用index 访问list中的元素(index的范围为:0 ~ len-1 ),当索引超出了范围时,Python会报一个IndexError错误
>>> classmates[0]
'Michael'
# list 的最后一个元素的两种表示方法
>>> classmates[len(classmates) - 1]
>>> classmates[-1]
############## 插入相关的方法 ########################
# 向list的末尾追加1个元素 append()
>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']
# 在指定位置前 插入1个元素
>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
############## 删除相关的方法 ########################
# 删除 最后1个元素
>>> classmates.pop()
'Adam'
# 删除 指定元素
>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']
############## 替换相关的方法 ########################
>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']
1.6.7 tuple (元组)
一种内部元素不可更改的list , 相较于 list 更安全
############# tuple 的定义 ###############
>>> t = (1, 2)
>>> t
(1, 2)
# 定义一个只有1个元素的tuple,
# 后面加逗号是为了避免被直接当成内部元素
>>> t = (1,)
>>> t
(1,)
1.6.8 dict (字典)
字典: 内部为键值对,“键”在该字典中必须唯一 ,字典是无序的
'''
dict有以下几个特点:
查找和插入的速度极快,不会随着key的增加而变慢;
需要占用大量的内存,内存浪费多。
key 不可变,因为用key查找value时,必须依靠key进行 hash运算
'''
############## dict的定义 ###############
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
# 放入元素
>>> d['Adam'] = 67
>>> d['Adam']
67
# 获取元素方法 get(键,当键不存在时的返回值【默认为None】)
>>> d.get('Thomas')
None
>>> d.get('Thomas', -1)
-1
# 删除某个键时,该键的值也会删除
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
1.6.9 set (集合)
集合类型 : 要创建一个set,需要提供一个list作为输入集合, set是无序的, 重复元素在set中自动被过滤 ,与dict一样内部元素不可变
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
############ 添加 set的元素 ########
# 添加set的元素 add( )
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
# 删除元素 remove( )
>>> s.remove(4)
>>> s
{1, 2, 3}
########### 集合set 之间的运算 ###########
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
# 并集
>>> s1 & s2
{2, 3}
# 交集
>>> s1 | s2
{1, 2, 3, 4}
1.7 运算符
# +
a = 1+2
# -
a= 3-1
# *
a= 3*2
# / 除法结果一定是小数
a= 2/3 # 0.66666666
b= 6/2
# // 整除
a= 6//5 # 1
# % 取余数
a = 7 % 5 # 2
1.8 条件判断
'''
if语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elif和else
'''
# 格式
age = 3
if age >= 18:
print('adult')
elif age >= 6:
print('teenager')
else:
print('kid')
# 简写,其中 x 只要为 非零数值、非空字符串、非空list等,就判断为True,否则为False
if x:
print('True')
1.9 循环
################# for 循环 ######################
# for...in 循环
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
# range(a,b)函数 的范围是[a,b)
# 例如:结果=5050 即:0-100
sum = 0
for x in range(101):
sum = sum + x
print(sum)
################# while循环 ########################
# 在循环内部变量n不断自减,直到变为-1时,不再满足while条件,循环退出
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
#################### break关键字 ####################
n = 1
while n <= 100:
if n > 10: # 当n = 11时,条件满足,执行break语句
break # break语句会结束循环
print(n)
n = n + 1
print('END')
#################### continue关键字 ####################
n = 0
while n < 10:
n = n + 1
if n % 2 == 0: # 如果n是偶数,执行continue语句
continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
print(n)
1.10 编码: Unicode ,ASCII ,UTF-8
ASCII编码和Unicode编码的区别:
- ASCII编码 是 1个字节,而 Unicode编码 通常是2个字节。
- 文本上全部是英文时,Unicode 编码 比 ASCII 编码 需要多一倍的存储空间,在存储和传输上就十分不划算。
- 把Unicode编码转化为“可变长编码”的 UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
- 传输的文本包含大量英文字符时,用 UTF-8编码 更节省空间 。
1.11 函数
1.11.1 内置函数 速查表
官网: https://docs.python.org/3/library/functions.html

1.11.2 自定义函数
'''
调用函数的时候,如果传入的参数数量不对,会报`TypeError`的错误
数据类型检查可以用内置函数isinstance()实现
'''
###################### 自定义 函数 ######################
#如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return
def my_abs(x):
if x >= 0:
return x
else:
return -x
#定义一个什么事也不做的空函数,使用pass 来充当占位符
def nop():
pass
# 数据类型检查可以用内置函数isinstance()实现
# isinstance(参数1,参数2) 如果参数1(object)的类型 与 参数二的类型(classinfo)相同则返回 True,否则返回 False
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
# 返回多个值的函数(实际上返回的是1个 tuple)
import math
def move(x, y, step, angle=0): #实际上 move( )返回的是1个 tuple
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print(x, y)
151.96152422706632 70.0
1.11.3 函数参数
1、默认参数:
默认参数必须指向 不可变的对象【如: str , tuple等】
如果默认参数为一个 list,则每次调用会记住上次调用的操作,造成结果不对
############### 默认参数 ###############
# 例如 以下的 n=2 就是默认参数
# 当我们调用power(5)时,相当于调用power(5, 2)
# 而对于n > 2的其他情况,就必须明确地传入n,比如power(5, 3)
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
2、可变参数(即:参数前加*号):
允许传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple
############### 可变参数 ###############
# 在函数内部,参数numbers接收到的是一个tuple,
# 因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,
# 包括0个参数,即:在普通的参数前加上*
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
>>> calc(1, 2)
5
>>> calc()
0
3、关键字参数(即:参数前加2个星号*):
允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
############### 关键字参数 ###############
# 关键字参数 允许你传入0个或任意个含参数名的参数,
# 这些关键字参数在函数内部自动组装为一个dict
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
# 只传入必选参数时
>>> person('Michael', 30)
name: Michael age: 30 other: {}
# 传入任意个数的关键字参数时
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
4、命名关键字参数:
######### 命名关键字参数 ################
# 命名关键字参数:限制关键字参数的名字
#命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数
def person(name, age, *, city, job):
print(name, age, city, job)
# 如果函数定义中已经有了一个可变参数,
# 后面跟着的命名关键字参数就不再需要一个特殊分隔符*了
def person(name, age, *args, city, job):
print(name, age, args, city, job)
#命名关键字参数 (调用时)必须连同 参数名 一起传入【有默认值时除外】
person('Jack', 24, city='Beijing', job='Engineer')

浙公网安备 33010602011771号