python3 集合、文件操作、转码、函数、高阶函数(三)

 小锋   2018-09-25 21:25   74 人阅读  0 条评论

字符串不可以修改,列表可以修改。

列表可以嵌套任何东西(字典、列表、字符串)

--------------------------------------------

集合操作

1、去重;2、关系测试


list_1 = [1,4,5,6,3,7,6,9]

list_2 =set([7,4,99,78,68,73])

list_3 =set([1,3,7])


list_1 set(list_1) #赋值成集合

list_1.intersection(list_2) #取交集,及重复值。

list_1.union(list_2) #取并集,两个集合合并,去除重复的。

list_1.difference(list_2) #差集,取list_1里面有,list_2里面没有的。

list_3.issubset(list_1) #子集,返回值 True list_1里面完全包含list_3

list_1.issuperset(list_3) #父集,返回值 True list_3里的数据完全被list_1包含

list_1.symmetric_difference(list_3) #对称差集,取两个结合互相都没有的值。


list_1.intersection_update #修改

list_1.isdisjoint(list_3) #是否有交集,是就True 否则F


print(list_1 | list_2) #并集

print(list_1 & list_2) #交集

print(list_1 – list_2) #求差集(项在list_1中,但不在list_2中)

print(list_1 ^ list_2) #对称差集(项在list_1或list_2中,但不会同时出现在二者中)


list_1.add(99) #添加

list_1.add([10,11,12]) #添加多项

list_1.remove('1') #删除1这一项

list_1.pop() #随机删除,并把删除的这一项返回

list_1.discard() #删除,不会报错,


------------------------------------------------------

文件操作 读写

r #读模式

w #写模式,覆盖原有数据

a #追加模式,不覆盖原有数据

r+ #读写

w+ #写读

rb #读二进制

wb #写二进制


# file.txt

data = open("file",encoding="utf-8").read()

print(data)

#测试打印全部文本内容

##########################################

f = open("file",'r'encoding="utf-8") #文件句柄,r就是读模式,模式是读模式

data = f.read()  #读取第一遍

data2 = f.read() @读取第二遍

print(data)

print('----22222----',data2)

#第一遍读完后,光标就在最后,当再读第二遍的时候,就会在第一遍读完的位置继续读,所以第二遍就没有内容。

for i in range(5):

    print(f.readline())  #读取前5行

------------------------------------------------

print(f.readlines())  #打印出一个列表,每一行当做一个元素记录

------------------------------------------------

for line in f.readlines():

    print(line.strip())  #把文件重复打印一遍,.strip() 去掉所有换行和空格

------------------------------------------------

for index,line in enumerate(f.readlines()):

    if index ==9:    #判断第10行

       print('------分隔符-----')  #在第10行后面打印分隔符

       continue

    print(line.strip())

-------------------------------------------------

for line in f:

    print(line) #一行一行的读取,不保存在内存里。

-------------------------------------------------

count = 0

for line in f:

    if count == 9:

       print('------分隔符-----')

       count += 1

       continue

    print(line)

    count +=1

#########################################

#写内容


f = open("file2",'w'encoding="utf-8") # w就是写模式,写的时候自动会创建一个名为file2的文件,如果有同名则直接覆盖

f.write("今天星期天,\n") # \n 换行

f.write("可以不用上班了。")

#########################################

#写内容,保留文件原有内容,不覆盖。

f = open("file2",'a'encoding="utf-8") # 写内容,主要是追加内容

f.write("今天星期天,\n") # \n 换行

f.write("可以不用上班了。")

--------------------------------------------

f = open("file2",'r'encoding="utf-8")

print(f.tell()) #结果为0,有多少个字符就显示多少

print(f.read(5)) #读5个字符

print(f.tell()) #执行到这里结果就是5.因为有5个字符

---------------------------------------------

f = open("file2",'w'encoding="utf-8")

print(f.readline()) #读一行

print(f.seek(0)) #光标返回到开始

print(f.seek(10)) #从第10个字符开始打印

---------------------------------------------

f = open("file2",'w'encoding="utf-8")

print(f.encoding) #打印文件的编码,这里是utf-8打开的,所以显示utf-8

print(f.fileno()) #返回句柄的编号


print(f.flush()) #实时刷新,强制刷新

--------------------------------------

精度条

import sys,time


for i in range(20):

    sys.stdout.write("#")

    sys.stdout.flush() #强制刷新

    time.sleep(0.1)   #等待时间0.1秒

---------------------------------------

f = open("file2",'a'encoding="utf-8")

f.truncate() #清空文件

f.truncate(10) #从头到第10个字符截断保留,后面的内容全部清空

---------------------------------------

读写,能读能写,也就是修改

f = open("file2",'r+',encoding="utf-8") #文件句柄 读写

print(f.readline())

print(f.readline())

print(f.readline())


print(f.readline())


---------------------------------

f = open("file2",'w+',encoding="utf-8") #文件句柄 写读


---------------------------------

f = open("file2",'rb') #文件句柄 二进制文件 网络传输、视频

---------------------------------

f = open("file2",'wb') #文件句柄 二进制文件

f.write("hello word\n".encode()) #写入内容,转换系统默认编码

f.close()  #关闭文件

-------------------------------------

读取旧文件,修改后创建新文件


f =open("file2","r",encoding="utf-8")

f_new =open("file","w",encoding="utf-8")


for line in f:

    if"345" in line:

        line = line.replace("345","3450") #读取旧文件,将345替换3450

    f_new.write(line) #写入新文件

f.close()

f_new.close()

----------------------------------------

with语句 帮助忘记关闭文件。

with open("file2","r",encoding="utf-8") as f,\ #as f 相当于 f = 

     open("file","r",encoding="utf-8") as f_new: #同时打开第二个文件

    for line inf f:

        print(line)

----------------------------------------

转码

#-*- coding:utf-8 -*-

import sys

print(sys.getdefaultencoding())  #打印系统默认编码,查看系统的默认编码是什么


s = "你好吗"

s_to_gbk = s.decode("utf-8").encode("gbk") #转码为gbk

print(s_to_gbk)

print("你好吗")


gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8") #gbk转码为utf-8


utf-8 是可以直接打印unicode编码,gbk不行,需要转码


print(s.encode()) #转换成byts 字节类型


代码文件是什么编码,就声明是什么编码。

----------------------------------------

函数


def func1():

    "这是一个测试函数" #函数描述

    print("一个字符串") #函数内容、代码

    return 0  #函数返回值


#过程


def func2():

    "这是一个测试过程" #函数描述

    print("一个字符串") #函数内容、代码


x = func1()

y = func2()


print("函数",%x)

print("过程",%y)


函数三大优点:1、代码重复利用;2、代码保存一致性;3、代码可扩展性

-------------------------------------------

def test1():

    print('in the test1')

    return 0

    print('test1 end')

test1()

#代码执行到teturn 0 时,就结束代码,同时返回值0,后面的‘test1 end’不会执行


x = test1() #将函数test1() 的函数值赋给变量x ,那么x的值就是0

print(x) #打印结果是 0


函数三种返回值:1、不写就是None;2、retur一个数据的时候返回一个值;3、多个数据返回一个元组

------------------------------------------

def test(x,y):

    print(x)

    print(y)

test(1,2)

test(y=2,x=1)

#结果打印1 和 2

-----------------------------------------

def test(x,y,z):

    print(x)

    print(y)

    print(z)

test(1,z=3,y=6) #第一个参数不能是变量,只能是一个值

#结果打印1 6 3

--------------------------------------------

默认参数

def test(x,y=2):

    print(x)

    print(y)

test(1)

#执行结果 1 2

test(1,y=5) #执行结果 1 5

test(1,6) #执行结果 1 6

#默认参数特点:调用函数的时候,默认参数非必传递

#用途:默认值

-------------------------------------------

参数组

def test(*shuzu): #定义一个多个实际参数的元组变量,必须*开头里面跟变量名

    print(shuzu)

test (1,2,3,4,5,6,7,8,9) #固定多个数值

test (*[1,2,3,4,5,6]) #变动多个数值

--------------------------------------------

def test(x,*shuzu):

    print(x)

    print(shuzu)

test(1,2,3,4,5,6,7)

#结果: 1  (2,3,4,5,6,7)

--------------------------------------------

参数组

def test(**keys):

    print(keys)

    print(keys['name'])

    print(keys['age'])

test(name="kasuo",age=18,sex='king')


#结果:{'age':8,'name':'kasuo','sex':'king'}

       kasuo

       18

       king

--------------------------------------------

def test(name,age=18,**keys):

    print(name)

    print(age)

    print(keys)

test('kasuo',sex='m',hobby='tesla',age=3)


#结果:kasuo

       3

       {‘sex’:‘m’,‘hobby’:‘tesla’}


--------------------------------------------

def test(name,age=18,*key,**keys):

    print(name)

    print(age)

    print(key)

    print(keys)

test('kasuo',age=3,sex='m',hobby='tesla')


#结果:kasuo

       3

       ()

       {‘sex’:‘m’,‘hobby’:‘tesla’}

----------------------------------------------

def test(name,age=18,*key,**keys):

    print(name)

    print(age)

    print(key)

    print(keys)

def logger(source):

    print("from %s" % source)

test('kasuo',age=3,sex='m',hobby='tesla')

---------------------------------------------

局部变量

def change_name(name):

    globl name #申明需要修改的局部变量名,就可以修改了

    print(name)

    name = "Kasuo li" #局部变量,这个函数就是这个变量的作用域,也只在函数中生效


name = "kasuo"

change_name(name)


#在函数中除去字符串和整数不能改,其他都可以修改全局变量

---------------------------------------------

函数 递归

#1、必须有一个明确的介绍条件;

#2、每进一层,就要减少

#3、效率不高


def calc(n):

    print(n)

    if int(n/2) > 0:

       return calc(n/2)

    print("->",n)


calc(10)


#结果:10

       5

       2

       1

       -> 1

----------------------------------------------

高阶函数

#一个函数接收另一个函数的参数,就是高阶函数


def add(x,y,z):

    return f(x)+(y)


res = add(5,-9,abs)

print(res)


----------------------------------------------

b = '''art = {

           'bakend':'www.wh100idc.com',

           'record':{

                   'server':'127.0.0.1',

                    'weight':20,

                    'maxconn':30


eval(b) #字符串转成字典


b = eval(b)


b['record']

本文地址:http://10tf.com/post/45.html
版权声明:本文为原创文章,版权归 小锋 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?