python 学习第二周总复习
数据类型内置方法
数字类型内置方法
整型
- 作用:定义年龄/身高/体重/id号
- 定义方式:
age = 18
age = int('18')
- 方法:
+ - * / % // ** - 多个值or一个值:一个值
- 有序or无序:压根没有有序无序这一说
- 可变or不可变:不可变
- 可变:值变id不变,值变id也变
浮点型
- 作用:定义薪资/价格
- 定义方式:
salary = 3.2
salary = float('3.2')
- 方法:
+ - * / % // ** - 多个值or一个值:一个值
- 有序or无序:压根没有有序无序这一说
- 可变or不可变:不可变
字符串类型内置方法
- 作用:姓名/
- 定义方式:
name = 'nick'
name = "nick"
name = '''
nick
nick
'''
name = """
nick
nick
"""
name = "'nick'"
name = '"nick"'
- 方法
- 优先掌握
- 索引取值
- 切片
- 长度
- 切分split
- 除两边空白strip
- 成员运算in not in
- for循环
- 需要掌握
- lstrip/rstrip
- rsplit
- upper/lower
- startstwith/endswith
- join
- replace
- isdigit
- 了解
- find/rfind/index/rindex/count
- center/ljust/rjust/zfill
- expantabs
- capitalize/swapcase/title
- is系列
- 优先掌握
- 多个值or一个值:一个值
- 有序or无序:有序
- 可变or不可变:不可变
列表类型内置方法
- 作用:多个女朋友/
- 定义方式:[]内用逗号隔开多个任意数据类型的元素
friends_list = ['longzeluola','canglaoshi','qiaobenai','nick']
lis = list('abcd')
- 方法:
- 优先掌握
- 索引取值(即可取又可改)
- 切片
- 长度
- append
- 成员运算
- for循环
- 需要掌握
- count
- remove
- reverse
- pop
- insert
- sort
- index
- del
- extend
- clear
- 优先掌握
- 多个值or一个值:多个值
- 有序or无序:有序
- 可变or不可变:可变
元祖类型内置方法
- 作用:类似于列表,可以取不可以存
- 定义方式:
friends_tuple = ('longzeluola','canglaoshi','qiaobenai','nick')
tup = tuple('abcd')
- 方法
- 优先掌握
- 索引取值(无法更改)
- 切片
- 长度
- 成员运算
- for循环
- count
- index
- 优先掌握
- 多个值or一个值:多个值
- 有序or无序:有序
- 可变or不可变:无可变不可变这一说
字典类型内置方法
- 作用:值太多列表存容易,取麻烦时使用字典
- 定义方式:
nick_info_dict = {
'name':'nick',
'height':180,
'weight':140,
'hobby_list':['read','run','music','fishing','programming','coding','debugging']
}
for k,v in nick_info_dict.items():
print(k,v)
- 方法
- 优先掌握
- 按键取值
- 长度
- keys/values/items
- for循环
- 成员运算
- 需要掌握
- pop
- fromkeys
- setdefault
- get
- update
- del
- 优先掌握
- 多个值or一个值:多个值
- 有序or无序:无序
- 可变or不可变:可变
集合类型内置方法
- 作用:存多个值,为了集合之间做运算
- 定义方式:
s = set()
s = {1,2,3,4,5,1}
- 方法:
- 优先掌握
- 去重
- 并集 |
- 交集 &
- 差集 -
- 对称差集 ^
- 父集 > >=
- 子集 <&emsp;<=
==
- 需要掌握
- add
- difference_update
- isdisjoint
- remove # 值不存在会报错
- discard # 不会报错
- 优先掌握
- 多个值or一个值:多个值
- 有序or无序:无序
- 可变or不可变:可变
布尔类型
- 作用:一般用于判断,除了0/None/空/False自带布尔值为False,其他的数据类型自带布尔值为True
数据类型总结
| 一个值 | 多个值 |
|---|---|
| 整型/浮点型/字符串 | 列表/元祖/字典/集合/ |
| 有序 | 无序 |
|---|---|
| 字符串/列表/元祖 | 字典/集合 |
| 可变 | 不可变 |
|---|---|
| 列表/字典/集合 | 整型/浮点型/字符串 |
拷贝
- 拷贝/浅拷贝/深拷贝都是针对可变类型数据而言的
l1 = ['a','b','c',['d','e','f']]
l2 = l1
l1.append('g')
print(l1) # ['a','b','c',['d','e','f'],'g']
print(l2) # ['a','b','c',['d','e','f'],'g']
如果l2是l1的拷贝对象,则l1内部的任何数据类型的元素变化,则l2内部的元素也会跟着改变,因为可变类型值变id不变
浅拷贝
import copy
l1 = ['a','b','c',['d','e','f']]
l2 = copy.copy(l1)
l1.append('g')
print(l1) # ['a','b','c',['d','e','f'],'g']
print(l2) # ['a','b','c',['d','e','f']]
l1[3].append('g')
print(l1) # ['a','b','c',['d','e','f','g'],'g']
print(l2) # ['a','b','c',['d','e','f','g']]
如果l2是l1的浅拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,则l2会跟着改变
深拷贝
import copy
l1 = ['a','b','c',['d','e','f']]
l2 = copy.deepcopy(l1)
l1.append('g')
print(l1) # ['a','b','c',['d','e','f'],'g']
print(l2) # ['a','b','c',['d','e','f']]
l1[3].append('g')
print(l1) # ['a','b','c',['d','e','f','g'],'g']
print(l2) # ['a','b','c',['d','e','f']]
如果l2是l1的深拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,l2也不会变,即l2永远不会因为l1的变化而变化


age = 18 # 答案
count = 0 # 游戏次数控制
prize_dict = {
0:'布娃娃',
1:'变形金刚',
2:'奥特曼',
3:'<Python从入门到放弃>'
}
# 核心代码
while count < 3:
inp_age = input('请输入你的年龄>>>').strip() # 与用户交互
# 判断用户是否骚扰
if not inp_age.isdigit():
print('傻逼,你的年龄输错了')
continue
inp_age_int = int(inp_age)
# 核心逻辑,判断年龄
if inp_age_int == age:
print('猜对了')
print(prize_dict) # 打印奖品
# 获取两次奖品
for i in range(2):
prize_choice = input('请输入你想要的奖品,如果不想要,则输入"n"退出!!!').strip() # 与用户交互获取奖品
# 判断是否需要奖品
if prize_choice != 'n':
print(f'恭喜你获得奖品: {prize_dict[int(prize_choice)]}')
else:
break
break
elif inp_age_int < age:
print('猜小了')
else:
print('猜大了')
count += 1 # 成功玩一次游戏
if count != 3:
continue
again_choice = input('是否继续游戏,继续请输入"Y",否则任意键直接退出.').strip() # 交互是否再一次
# 判断是否继续
if again_choice == 'Y':
count = 0
0531总复习
数据类型内置方法
整形类型内置方法
+ - * / // % **
浮点型类型内置方法
+ - * / // % **
字符串类型内置方法
优先掌握
- 索引取值
- 切片
- 切割split
- 长度
- 成员运算
- 去除空白strip
- for循环取值
需要掌握
- lstrip/rstrip
- rsplit
- upper/lower
- startswith
- endswith
- isdigit
- join
- replace
了解
- find/rfind/index/rindex/count
- center/ljust/rjust/zfill
- swapcase/capitalize/title
- extendtaps
- is系列
列表类型内置方法
优先掌握
- 索引取值,索引更改值
- 切片
- 长度
- 成员运算
- append
- del
- for循环
需要掌握
- insert
- index
- sort
- remove
- extend
- count
- pop
- clear
- copy
- reverse
元组类型内置方法
优先掌握
- 索引取值
- 切片
- 长度
- 成员运算
- count
- index
- for循环
字典类型内置方法
优先掌握
- 按键取值
- 长度
- 成员运算
- keys/vlaues/items
- for循环
- del
- pop(随机删除,因为字典是无序的)
需要掌握
- fromkeys
- get
- update
- setdefault
集合类型内置方法
优先掌握
- 去重
- 长度
- 成员运算
- |
- &
- ^
- > >=
- < <=
- = =
需要掌握
- add
- remove
- difference_update
- discard(不报错)
- isdisjoint
数据类型总结
可变or不可变
| 可变 | 不可变 |
|---|---|
| 列表,字典,集合 | 字符串,整形,浮点型 |
有序or无需
| 有序 | 无序 |
|---|---|
| 字符串,列表,元组 | 字典,集合 |
存一个值or多个值
| 存一个值 | 存多个值 |
|---|---|
| 整型,浮点型,字符串 | 列表,集合,字典,元组 |
拷贝
l1= [1,1]
l2 = l1
- 当l2为l1的拷贝对象时,l1发生变化,l2也会随之发生变化
浅拷贝
l1 = [1,2,[1,2]]
import copy
l2 = copy.copy(l1)
- 当l2为l1的浅拷贝时,l1内部的不可变元素发生变化,l2不变;l1内部的可变元素发生变化,l2也会随着发生变化
深拷贝
l1 = [1,2,3,[2,3]]
import copy
l2 = copy.deepcopy(l1)
- 当l2为l1的深拷贝对象时,l1内部的元素发生变换,l2都不会发生变化
- 拷贝/浅拷贝/深拷贝都是针对可变类型数据而言的
字符编码
- 用什么编码写的文件,就用什么编码打开,unicode--》gbk 编码encode;gbk ---》 unicode 解码 decode
Python3解释器编码
当python3解释器启动,并生成变量时,会以unicode的形式把变量读入内存,当我们使用print方法时,print会自动按照终端的字符编码 编码unicode形式的变量
生成变量时以unicode丢入内存,终端时gbk,还是utf8,这终端都可以识别。
生成变量时以utf8丢入内存,终端为utf8,可以,但是终端为gbk,不可以了。错误
文件操作
打开文件的流程
- 打开文件 open
- 读写文件 read/write
- 关闭文件 close
with管理上下文
with open(文件名,打开模式,编码格式) as f:
f.操作命令
打卡文件的三种模式
- r只读 (默认)
- w清空只写
- a追加写入
- t 文本模式(默认)
- b 二进制模式
同时打开两个文件
with open(文件一),open(文件二),open(文件三)……
文件复制
with open('a.txt','r',encoding='utf8') as fr, open('a_swap.txt','w',encoding='utf8') as fw:
data = fr.read()
# 做一些处理之后
fw.write(data)
fw.flush()
import os
os.remove('a.txt')
os.rename('a_swap.txt','a.txt')
打开文件file后,file的方法
- f.read() # read(n)意味着读几个字符
- f.write()
- f.readline()
- f.readlines() (如果取出来时for循环的话,可以for i in f)
- f.flush()
- f.seek()
- f.tell()
- f.truncate()
函数
定义函数
def 函数名():
代码块
- 定义阶段只检测语法,不执行代码
函数的三种形式
- 无参函数
- 有参函数
- 空函数
调用函数
def f1():
return 2
f1()
f = f1()
- 调用阶段才执行代码
函数的返回值
- 默认为None,如果遇到return则会终止函数,可以返回多个值(接收的时候为元组形式),并且值为任意数据类型
函数的参数
形参:接受实参,具有某种描述意义,但没有具体的值
- 位置形参:最普通的参数,从左到右接收一一对应的实参
- 默认形参:具有默认值,必须的写在位置形参的后面
实参:具有具体的值
- 位置实参:从左到右传值给一一对应的形参
- 关键字实参:指定参数传给形参,必须写在位置实参后面
可变长参数
*
- *实参:把元组/列表打散成位置实参一个个传给形参,类似于解压缩
- *形参:接收多余的位置实参,储存为元组的形式
import random
import time
with open('0531总复习.md','r',encodint='utf8') as fr:
for i in range(50):
fr.read(random.randint(1,300))
time.sleep(30)
**
- **实参:把字典打散成关键字实参一个个传给形参,
- **形参:接收多余的关键字实参,存储为字典的形式,**kwargs
函数对象
def f1():
pass
# 1.引用
f = f1
# 2.当作返回值
def f2():
return f1
# 3. 当作参数传入
def f3(func):
func()
f3(f1)
# 4. 作为容器元素
lis = [1,2,3,[2,3],f1,f2,f3]
函数嵌套
def f1():
def f2():
pass
名称空间与作用域
- 内置名称空间
- 全局名称空间
- 局部名称空间
- 执行顺序:内置--》全局--》局部
- 查找顺序:从当前位置开始,如果当前为局部,则为局部--》全局--》内置
作用域: 全局的变量和局部的变量没有任何关系,即使两者中有同一名字的变量,同意名字的变量之间进行任何操作都不会影响对方
x = 10
def f1():
x = 2
print(x) # 2
f1()
print(x) # 10
可变的作用域事项(了解)
lis = [1]
def f1():
lis[0] = 2
f1()
print(lis) # [2]
闭包函数
def f1(x):
def f2():
print(x)
return f2
f = f1(5) # f-->f2,x=5
f() # f()-->f2(),x=5 # 5
f() # 5
f3 = f1(3) # f-->f2,x=3
f3() # f()-->f2(),x=3 # 3
f3() # 3
- 把内部定义的变量放到内部的函数中,让两者一起返回出去
装饰器
def deco(func):
def wrapper(*args,**kwargs): # 赋值后的time_sleep
res = func(*args,**kwargs) # 真正的time_sleep
return res
return wrapper
@deco # time_sleep(赋值后的) = deco(time_sleep(真正的))
def time_sleep(name):
print(name)
return 123
无参装饰器
is_login_dict = {'username': None}
def login_deco(func):
def wrapper(*args, **kwargs): # 赋值后的time_sleep
if not is_login_dict['username']:
username = input('请输入你的用户名》》》').strip()
if username != 'fanping':
print('非法登录')
return
is_login_dict['username'] = username
res = func(*args, **kwargs) # 真正的time_sleep
return res
else:
res = func(*args, **kwargs) # 真正的time_sleep
return res
return wrapper
@login_deco
def shopping():
print('from shopping')
@login_deco
def withdraw():
print('from withdraw')
有参装饰器
is_login_dict = {'username': None}
def auth(origin):
def login_deco(func):
def wrapper(*args, **kwargs): # 赋值后的time_sleep
if origin == 'file':
if not is_login_dict['username']:
username = input('请输入你的用户名》》》').strip()
if username != 'fanping':
print('非法登录')
return
is_login_dict['username'] = username
res = func(*args, **kwargs) # 真正的time_sleep
return res
else:
res = func(*args, **kwargs) # 真正的time_sleep
return res
elif origin == 'mongodb':
print('非法登录')
else:
print('dsb')
return wrapper
return login_deco
# f = origin('file') # login_deco
# shopping = f(shopping)
# shopping()
@auth('file')
def shopping():
print('from shopping')
@auth('mongodb')
def withdraw():
print('from withdraw')
- 装饰器是为了给函数增加功能,但是不改变函数内部语法,不改变函数调用方式/
python 学习第二周总复习的更多相关文章
- python课程第二周重点记录
python课程第二周重点记录 1.元组的元素不可被修改,元组的元素的元素可以被修改(字典在元组中,字典的值可以被修改) 2.个人感觉方便做加密解密 3.一些方法的使用 sb = "name ...
- python学习第二讲,pythonIDE介绍以及配置使用
目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...
- python学习第二次笔记
python学习第二次记录 1.格式化输出 name = input('请输入姓名') age = input('请输入年龄') height = input('请输入身高') msg = " ...
- 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】
[中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第二周
学习第二周(Java基本程序设计结构) 这一周,着重学习了Java的简单程序设计实现及运行,通过自己操作,发现Java的程序语法大面 ...
- Python学习-第二天-字符串和常用数据结构
Python学习-第二天-字符串和常用数据结构 字符串的基本操作 def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1 ...
- python学习第二天 -----2019年4月17日
第二周-第02章节-Python3.5-模块初识 #!/usr/bin/env python #-*- coding:utf-8 _*- """ @author:chen ...
- H5学习第二周
怎么说,在各种感觉中h5学习的第二周已经过来了,先总结一下,感觉学习h5是一件让我爱恨交加的事,学会一些新的知识并把它成功运行出来的时候是非常激动和兴奋的,但是有时候搞不懂一个标签或者属性的时候,就有 ...
- Java学习第二周学习笔记
20145307<Java程序设计>第二周学习总结 教材学习内容总结 Java语言中的很多基本语法都和C语言类似,以下Java中的基本语法 标识符 标识符是程序中自定义的一些名称. 由26 ...
随机推荐
- jave 计算音视频时长
File source = new File("视频.mp4"); Encoder encoder = new Encoder(); try { MultimediaInfo in ...
- socket连接 代码
dispatch_sync(dispatch_get_global_queue(, ), ^{ // 处理耗时操作的代码块... // 创建socket /* 1.AF_INET: ipv4 执行ip ...
- python 基础(五) 迭代器与生成器
迭代器和生成器 迭代器 iterator (1) 迭代对象: 可以直接作用于for循环的 称为可迭代对象(iterable)可以通过 isinstance 判断是否属于可迭代对象 可以直接作用于for ...
- 【模板】平衡树——Treap和Splay
二叉搜索树($BST$):一棵带权二叉树,满足左子树的权值均小于根节点的权值,右子树的权值均大于根节点的权值.且左右子树也分别是二叉搜索树.(如下) $BST$的作用:维护一个有序数列,支持插入$x$ ...
- centos下gitlab的简单安装配置
一.安装前配置yum源 #wget https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh #s ...
- CSS子元素设置margin-top作用于父容器?
CSS子元素设置margin-top作用于父容器? 原因: In this specification, the expression collapsing margins means that ad ...
- JS字符串处理方法
1.字符方法charAt()和charCodeAt();这两个方法都接收一个参数例:<script>var stringValue = "hello world"; s ...
- Linux基础知识介绍
1.Linux知识说明1)文件位置 1)/etc/inittab2)模式介绍 0:挂起模式-不推荐 1:单用户模式-只有管理员可以进入该模式,可以修改root密码,处理有登录权限而没有修改文件的权限问 ...
- 简单明了理解Java移位运算符
无须多言: @Test public void intro() { assertThat("应该相等", -1 >> 1, equalTo(-1)); assertTh ...
- UVA Live 3713 Astronauts (2-SAT)
用布尔变量表示状态,把限制条件转化为XνY的形式以后跑2SAT,根据变量取值输出方案. #include<bits/stdc++.h> using namespace std; ; #de ...