python3学习第三周
1.列表,元组操作
列表是通过下标(索引)对元素进行增删该查的。
列表中可以嵌套列表,元组。
列表是有序的。
元组是只读的,不能更改。
2.字符串操作
字符串是不能更改的
3.字典操作
字典是通过key对value进行增删改查的。
字典可以嵌套列表,字典。
字典是无序的。
4.集合操作
集合是一个无序的,不重复的数据组合,它的主要作用是
a.去重:把一个列表变成集合,就自动去重了。
b.关系测试:测试两组数据之间的交集、差集、并集等关系。
a=set([1,2,3,4,5,6]) #创建一个数字集合
b=set("hello") #创建一个字符集合
list_01=set([1,2,3,4,5,6])
list_02=set([4,5,6,7,8])
list_03=[1,2,3,4,5,4,5,6]
print(list_01,type(list_01),list_02)
print(set(list_03)) #把列表list_03转换成集合完成去重
print(list_01.union(list_02)) #求两个集合的并集
print(list_01.intersection(list_02)) #求两个集合的交集
print(list_01.difference(list_02)) #求两个集合的差集
print(list_02.difference(list_01)) #求两个集合的差集
print(list_01.issubset(list_02)) #判断list_01是list_02的子集吗
print(list_01.issuperset(list_02)) #判断list_01是list_02的父集吗
print(list_01.symmetric_difference(list_02)) #求list_01和list_02的对称差集
print(list_01.isdisjoint(list_02)) #判断list_01和list_02是否有交集,无返回ture
print(list_01 | list_02) #求两个集合的并集
print(list_01 & list_02) #求两个集合的交集
print(list_01 - list_02) #求两个集合的差集
print(list_01 ^ list_02) #求list_01和list_02的对称差集
a=set([1,2,3])
a.add(99) #给集合中添加一项
a.update([77,88]) #给集合中添加多项
a.remove(99) #删除集合中的指定元素,如果指定元素不存在,就会报错
a.discard(99) #删除集合中的指定元素,如果指定元素不存在,不会报错
print(1 in a) #判断1是否是集合a的一员
print(0 not in a) #判断0是否不是集合a的一员
print(len(a)) #求集合中的元素个数或者长度
print(a.pop()) #随机删除一个元素,并返回这个元素
5.文件操作
对文件操作的流程:
a.打开文件,得到文件句柄并赋值给一个变量
b.通过句柄对文件进行操作
c.关闭文件
文件操作例子:
f=open("bbc_news","r",encoding="utf-8") #"r"表示以读的模式打开文件,得到句柄并赋值给f
date=f.read() #通过句柄读取文件并赋值给date
print(date)
f.close() #关闭文件
f=open("bbc_news2","w",encoding="utf-8") #"w"表示以写的模式打开文件,得到句柄并赋值给f
#"w"也表示创建一个文件
f.write("123456") #通过句柄给文件写入内容
f.close() #关闭文件
f=open("bbc_news2","a",encoding="utf-8") #"a"表示以append追加模式打开文件,得到句柄并赋值给f
f.write("\n78910") #通过句柄给文件末尾写入内容
f.close() #关闭文件
# readlines() #读取所有行并返回列表
#打印出文件中的前两行
#是低效率循环
f=open("bbc_news","r",encoding="utf-8")
for index,line in enumerate(f.readlines()):
if index<2:
print(line.strip())
#打印出文件中的前两行
f=open("bbc_news","r",encoding="utf-8")
#读一行放进内存,输出后就删除,读取过程中内存中始终只有一行数据
#是高效率循环
count=0
for line in f:
if count<2:
print(line.strip())
count+=1
f.close()
#高效率循环打印出文件中的所有行
f=open("bbc_news","r",encoding="utf-8")
for line in f:
print(line.strip())
f.close()
f=open("bbc_news","r",encoding="utf-8")
print(f.tell()) #打印出当前文件句柄的指针位置
print(f.readline())
print(f.tell())
f.seek(0) #让当前文件句柄的指针位置回到零
print(f.readline())
print(f.tell())
print(f.encoding) #打印出文件的编码格式
print(f.fileno()) #打印出文件在内存中的编号
print(f.seekable())#判断文件句柄的指针位置能否回到零
f.close()
f=open("bbc_news2","a",encoding="utf-8")
f.write("hello2\n")
f.flush() #刷新:强制把写在缓存或者内存中的内容写到硬盘上
f.close()
#flush()应用打印进度条
import sys,time
for i in range(50):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(0.2)
f=open("bbc_news","a",encoding="utf-8")
f.truncate(10) #从文件的首行首字符开始截断10个字符
f.close()"""
f=open("bbc_news","r+",encoding="utf-8") #以读写模式打开文件
print(f.readline())
f.write("\nagaggg") #以读写模式打开文件然后写,结果是在文件最后追加
f=open("bbc_news","a+",encoding="utf-8") #以追加读写模式打开文件
f=open("bbc_news","rb") #以二进制模式读取文件,网络传输只能用二进制,视频也是二进制
f=open("bbc_news3","wb") #以二进制模式写入文件
f.write("hello".encode()) #"hello".encode()把字符串转二进制
f.close()
文件修改:
f=open("bbc_news","r",encoding="utf-8")
f_new=open("bbc_news.bk","w",encoding="utf-8")
"""
#修改文件后保存到新文件中(源文件不变)
for line in f:
if "你" in line:
line=line.replace("你","她")
f_new.write(line)
f.close()
f_new.close()"""
with用法:
#用with打开文件,执行完后会自动关闭打开的文件
with open("bbc_news","r",encoding="utf-8") as f:
for line in f:
print(line)
#用with可以同时打开几个文件
with open("bbc_news","r",encoding="utf-8") as f, \
open("bbc_news2", "r", encoding="utf-8") as f2:
#在dos环境下运行该文件输入:python 文简名.py 参数1 参数2
#Sys.argv其实就是一个列表,里边的项为本文件的绝对路径+用户输入的参数
import sys
print(sys.argv) #打印列表(该列表元素是本文件的绝对路径+参数1+参数2)
print(sys.argv[0]) #打印出列表中的第一个元素
print(sys.argv[1]) #打印出列表中的第二个元素
6.字符编码与转码
# -*- coding:utf-8 -*- 表示本文件的编码格式
# Author:张泼
#无论是gbk转uft-8,还是utf-8转gbk,都需要先转换成Unicode,
# 而在python3中字符串的编码格式是unicode,所以可以直接转换成其它编码格式
#encode()转化为其它编码格式,decode()转换成Unicode格式,
#在Python3中要正常显示字符串要把字符串转换成Unicode格式
s="你好" #在python3中字符串编码格式是Unicode
unicode_to_gbk=s.encode("gbk") #Unicode转bgk
gbk_to_unicode=unicode_to_gbk.decode("gbk") #bgk换Unicode
unicode_to_utf8=gbk_to_unicode.encode("utf-8") #Unicode换uft-8
#gbk转uft-8
s.encode("gbk").decode("gbk").encode("utf-8")
print(unicode_to_gbk)
print(gbk_to_unicode)
print(unicode_to_utf8)
7.函数
(1)函数基本语法及特性
函数概念:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。
import time
#打印日志并且加上日志打印时间时间
time_format="%Y-%m-%d %X"
time_curent=time.strftime(time_format)
def logger():
with open("a.text","a+",encoding="utf-8") as f:
f.write("%s你是我的小苹果!\n"%time_curent)
def test():
logger()
test()
特性:a.减少重复代码
b.使程序变得可拓展
c.使程序边的可维护
a.函数定义:
def test():
print("hello")
def test():
pass
b.函数调用:
test()
c.带参函数:
def cal(x,y):
res=x+y
return res
(2)函数参数
a.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
b.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
def cal(x,y): #x,y为形参
res=x+y
return res
c=cal(3,5) #3,5为实参
print(c)
调用函数时,给形参传入值可以按照位置传入,也可以按照关键字传入。
位置参数调用:
cal(4,1) #4,1为位置参数调用(按位置传入),与形参一一对应
关键字参数调用:
cal(y=1,x=4) # y=1,x=4为关键字参数调用(按关键字传入),与形参顺序无关。
c.默认参数:
#带有默认参数的函数
deftest(x,y=2):
print(x)
print(y)
test(1) #用默认值
test(1,y=6) #用你指定的值
总结:
这个参数在调用时不指定,那就用默认值,指定了的话,就用你指定的值
d.非固定参数:
若函数在定义时不确定用户想传入多少实参数,就可以使用非固定参数。
*表示这个参数的个数不确定,args表示参数名
#非固定参数函数定义1
def sum(a,b,*args): #args接收位置参数,并转换为元组形式
print(a,b,args)
sum(1,3) #输出:1 3 () #后面这个()就是args,只是因为没传值,所以为空
sum(1,3,4,5,6,7,8,9) #输出:1 3 (4, 5, 6, 7, 8, 9)
#非固定参数函数定义2
**表示这个参数的个数不确定,kwargs表示参数名
def sum(a,b,**kwargs): #kwargs接收关键字参数,并转换为字典形式
print(a,b,kwargs)
sum(1,3) #输出:1 3 {} #后面这个{}就是args,只是因为没传值,所以为空
sum(1,3,c=6,d=8) #输出:1 3 {'c': 6, 'd': 7}
#非固定参数函数定义3
def test(a,b,*args,**kwargs):
print(a)
print(b)
print(args)
print(kwargs)
test(1,2,3,4,name="zb",id="001")
输出结果:
1
2
(3, 4)
{'name': 'zb', 'id': '001'}
test(1,2,name="zb",id="001")
输出结果:
1
2
()
{'name': 'zb', 'id': '001'}
总结:
args接收N个位置参数,并转换为元组形式。
kwargs接N个收关键字参数,并转换为字典形式。
(4)全局与局部变量
a.在子程序中(函数)定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
b.全局变量作用域是整个程序,局部变量作用域是定义该变量的函数。
c.当全局变量与局部变量同名时:
在定义局部变量的函数内,局部变量起作用;在其它地方全局变量起作用。
d.字符串、数字这类全局变量是不能用局部变量直接更改的,列表、字典、集合、类这类全局变量是能够用局部变量直接更改的
name="liu chen"
def change_name():
global name #声明此处的变量为全局变量,就可以改全局变量的值
name="wjb"
print(name)
change_name()
print(name)
#在函数中定义全局变量,不要用
def change_name():
global name #声明此处的变量为全局变量
name="wjb"
print(name)
change_name()
names=["n1","n2"]
def chang_name():
names[0]="mn" #更改全局变量names的值
print(names)
chang_name()
(5)返回值
返回值的数=0时,则返回none
返回值的数=1时,则返回object
返回值的数>1时,则返回元组tuple
要想获取函数的执行结果,就可以用return语句把结果返回,为什么要有返回值,因为其它程序可能要用的。
注意:
a.函数在执行过程中只要遇到return语句,就会停止执行并返回结果,也可以理解为 return 语句代表着函数的结束
b.如果未在函数中指定return,那这个函数的返回值为None
(6)递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
递归特性:
a.必须有一个明确的结束条件。
b.每次进入根深一层递归时,问题规模都应该比上一次递归都应该减少。
c.效率不高。
def calc(n):
print(n)
if int(n/2)>0:
return calc(int(n/2))
print("->",n)
calc(10)
(7)匿名函数
(8)函数式编程介绍
函数式编程与我们所说的函数不一样。
函数式编程
def test1():
print("so do i")
return 0
面向过程编程
def test2():
print("so do i")
总结:
如果函数体中有return的叫函数式编程,否则叫面向过程编程
(9)高阶函数
高阶函数概念:一个函数接收另一个函数作为参数,那么这个函数叫高阶函数。
def calc(a,b,f):
print(f(a)+f(b))
calc(3,-9,abs)
(10)内置函数
5.内置函数
程序练习
1.实现简单的替换功能
#把旧文件中的语句替换成新的,存放在新文件中
def replaced(old_file,new_file,old_word,new_word):
with open(old_file,"r",encoding="utf-8")as f1,\
open(new_file,"w",encoding="utf-8") as f2:
for line in f1:
if old_word in line:
line=line.replace(old_word,new_word)
f2.write(line)
else:
f2.write(line)
replaced("b.text","c.text","樱桃","花生")
2.修改haproxy配置文件
#查询
def query():
with open("d.text","r",encoding="utf-8") as f1:
for line in f1:
if line.strip().startswith("backend") or line.strip().startswith("server"):
print(line.strip())
#添加
def add_bs():
arg_dict = {
"bakend": "www.hao123.com",
"record": {
"server": "100.1.8.9 100.1.8.9",
"weight": 20,
"maxconn": 30
}
}
with open("d.text","a",encoding="utf-8") as f2:
f2.write("\n"+"bakend "+arg_dict["bakend"])
f2.write("\n"+" server "+str(arg_dict["record"]["server"])+\
" weight "+str(arg_dict["record"]["weight"])+\
" maxconn "+str(arg_dict["record"]["maxconn"]))
#删除
def delete():
with open("d.text","r",encoding="utf-8") as f1,\
open("e.text", "w", encoding="utf-8") as f2:
for line in f1:
if "bakend www.hao123.com"==line.strip():
line=line.replace("bakend www.hao123.com","")
f2.write(line)
elif "server 100.1.8.9 100.1.8.9 weight 20 maxconn 30"==line.strip():
line=line.replace("server 100.1.8.9 100.1.8.9 weight 20 maxconn 30","")
f2.write(line)
else:
f2.write(line)
#打印选项
menus={"1":"查询","2":"添加","3":"删除","4":"退出"}
for i in menus:
print(i+"."+menus[i])
#选择功能
ischoice=True
while ischoice:
choice = int(input("请选择功能:"))
if choice==1:
print("你选的是查询,查询结果如下:")
query()
elif choice==2:
print("你选的是添加")
add_bs()
elif choice==3:
print("你选的是删除")
delete()
else:
print("你选的是退出")
ischoice=False
转载于:https://www.cnblogs.com/zhangpo/p/9119580.html
python3学习第三周相关推荐
- Java学习---第三周周报
第三周周报 收获 1.正则表达式的进阶应用-计算器 通过再次对正则表达式的学习,记住了各个符号的应用,通过下题的展示,得到了一种思路,可以用于设计计算器,在计算器的设计中,让用户输入一连串的数字包括运 ...
- 动态网站设计与开发学习第三周体会
这学期开始接触了动态网站的开发和设计,认识到以前学习静态网站的弊端(静态网站无法实现搜索.购买.登录等交互功能,无法对静态页面的内容进行实时更新) 认识并学习web项目开发 web(World Wid ...
- 吴恩达神经网络和深度学习——第三周笔记
Week 3 目录 Week 3 3-1神经网络概述 3-2神经网络的表示 3-3计算神经网络的输出 3-4多个栗例子中的向量化 3.5 向量化实现的解释 3-6.3-7.3-8激活函数 3-11随机 ...
- 学习笔记-小甲鱼Python3学习第三十一讲:永久存储:腌制一缸美味的泡菜
pickle函数 打开--读/写--关闭 看个例子: >>> import pickle#导入pickle()函数 >>> my_list = [123,23.23 ...
- Python3学习(三十):python连接mysql数据库及相关操作
Python3 MySQL 数据库连接 本文我们为大家介绍 Python3 使用 PyMySQL 连接数据库,并实现简单的增删改查. 什么是 PyMySQL? PyMySQL 是在 Python3.x ...
- Python3学习(三十四):python正常时间戳与Unix时间之间的相互转换
对于时间数据,如2018-09-25 09:28:59,有时需要与时间戳进行相互的运算,此时就需要对两种形式进行转换,在Python中,转换时需要用到time模块,具体的函数如下: 其中unix_ti ...
- 【博学谷学习记录】超强总结,用心分享|大数据课程-学习第三周总结
1. 大数据课程导论 数据分析的前提是有数据,数据存储的目的是支撑数据分析.究竟怎么去存储庞大的数据量,是开展数据分析的企业在当下面临的一个问题.传统的数据存储模式存储容量是有大小限制或者空间局限限制 ...
- Python语言程序设计(嵩天老师版)第三周代码解析——字符串部分
目录 一.文本进度条 二.星号三角形 三.凯撒密码 一.文本进度条 题目: 采用字符串方式打印可以动态变化的文本进度条,进度条需要能在一 ...
- 前三周学习Python的心得与感受
还没有接触Python时,我以为这门语言会和C++有着天壤之别,但当我真正开始接触它时,才发现,Python与C++非常相似却又非常不同,刚上手时,Python给我的第一感受就是舒服,自我感觉它比C+ ...
最新文章
- 网站性能越来越差怎么办?
- 模仿android谷歌地图功能开发记录
- MSTAR SETBOX 常用API
- 使用Aspose.Cells的基础知识整理
- 把struts2的struts.xml配置文件分解成多个配置文件
- mnesia数据库学习笔记四
- 跨域解决请求限制(script标签)(热门搜索出现对应的词条)
- 组件中使用_React四种组件通信详解
- 安装安全类软件进行了android签名漏洞修补,魅族MX3怎么升级固件体验最新比较稳定的版本...
- Docker 1.0对OpenStack意味着什么
- echarts 3d地图_独占进博会800m2展厅!3D炫酷光影秀带你邂逅金山往事..._政务_澎湃新闻...
- 使用Fsharp 探索 Dotnet 平台
- 位运算初步入门状态压缩操作
- Ice简介+Qt代码示例
- Eclipse —— 官网下载地址
- linux卸载nvdia驱动_Ubuntu 卸载 Nvidia 驱动和安装最新驱动
- 【原型图设计工具】墨刀使用说明
- 服务器获取交换机端口状态,如何查找交换机端口对应的IP地址
- 计算机容斥原理,三集合容斥原理解题技巧
- The server quit without updating PID file
热门文章
- Theano2.1.6-基础知识之在thenao中的求导
- Android Fragment应用实战
- 百万级数据库优化方案[转载]
- 变化的和不变的。。。(2004版)
- spring boot configuration annotation processor not found in classpath问题解决
- 第十三天-迭代器、三元表达、字典生成式、生成器、递归
- hive中的UDAF的使用流程记载
- linux安装x11鼠标主题
- 宽带651以及光猫红色灯闪烁-故障维修
- oracle恢复drop建的表首次,案例:Oracle dul数据挖掘 没有备份情况下非常规恢复drop删除的数据表...