码迷,mamicode.com
首页 > 编程语言 > 详细

python第三天学习复习,集合set,文件操作,函数(普通函数,递归,高阶函数),字符编码和解码

时间:2017-12-08 16:27:01      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:去掉   问题   效率   png   不能   nbsp   两种   unicode编码   文件的   

 三元运算 

age = 23
#就是if else的简单写法
a = age if age < 20 else 25

集合 set

#集合是无序切不重复的,
#当对列表去重复的时候,可以直接使用 set(list),就将list转为set,并去除中间重复的
list = [1,2,3,4,5,5,6,7,8,9,1]
s = set(list)

运行结果:可以发现将 list中重复的去掉,并且类型变成set,再使用list(set),转为list

技术分享图片

集合操作

# Author:zylong
set1 = set([1,2,3,4,5,5,6,7,8,9,1])
set2 = set([0,2,4,6,8,10])

#交集
print(set1.intersection(set2))
print(set1 & set2)

#并集
print(set1.union(set2))
print(set1 | set2)

#差集
print(set1.difference(set2))
print(set1 - set2)

#对称差集,就是 用并集 - 交集 的结果
print(set1.symmetric_difference(set2))
print(set1 ^ set2)
#是否是子集,父集
set1.issubset(set2)
set1.issuperset(set2)

#删除
set1.remove(1)#当元素不存在时报错
set1.discard(1)#不存在不报错
#增加
set1.add(10)

#判断是否存在
print( 10 in set1)
#修改
set1.update(set2)
print(set1)

字符编码和解码

  

#python 内部编码是unicode
#编码和解码,就是 --通过重甲unicode进行转换
#如果在文件头指定编码 #-*-coding:gbk-*- 这句话的意思是指,这个文件以什么编码解析,并不是文件中的内容以什么编码解析,
# 文件中的内容还是以unicode编码,并且编码后都是字节
string = "你好"

string_to_utf8 = string.encode("utf-8")
string_utf8_to_gbk = string_to_utf8.decode("utf-8").encode("gbk").decode("gbk")#这句话最后转为的是unicode

print(string_to_utf8)
print(string_utf8_to_gbk)

文件操作

# Author:zylong
#文件的增删改查

#使用with 这种方式,with结束时,程序自动关闭程序,就是调用f.close()方法
with open("复习.py",mode="r",encoding="utf-8") as f:
    "按行读取"
    for line in f:
        print(line)
#open的打开模式

f = open("复习.py",mode="r",encoding="utf-8")
#这个是只读模式,不能写,如果调用写的方法报错
#
f1 = open("aa","w",encoding="utf-8")
#这个w方式是创建新的文件,如果文件存在,则覆盖原先文件
f1.write("你好")
f1.close()
#在文件末尾追加
f = open("aa","a",encoding="utf-8")
f.write("\n好的\n")
f.close()
#这个是读写模式打开,这种模式写,是在文件末尾追加
f = open("bb","r+",encoding="utf-8")
print(f.tell())
print(f.readline())#读取文件指针所在的往后一行 打印的结果是“你好”
print(f.tell())
f.seek(3)#这里不能设置 1,2,因为文件开头是中文,中文站三个字节,这里的是按字节位置的
print(f.readline())#打印的结果是 “好”
f.write("\naaaa\n")
f.close()
#查找,就是使用循环,使用
for line in f:#这样的效率高,这个是一行一行的读
    pass
for line in f.readlines():#这种方式是将文件内容全部加载到内存中,当文件比较大的时候效率比较低
    pass

函数:

  

# Author:zylong
#函数定义:使用def 关键字,方法名,方法体
#没写返回值的,python默认返回 none
def fun_test1():
    print("第一个函数")

#有返回值
def fun_test2():
    return 0
#有参数
def fun_test3(x,y):
    print(x)
    print(y)
#调用的时候,有两种调用方式
#1.形参[按照参数的位置,进行调用]
fun_test3(1,2)
#2.实参
fun_test3(y=2,x=1)
#函数参数上有默认值
def fun_test4(x=4,y=5):
    print(x)
    print(y)
#这种调用的时候,可以传参数,也可以不穿参数,当不传值时,使用默认值
fun_test4()
#形参必须在实参前面
fun_test3(1,y=2);
#不定参数,后面不定参数,python包装成一个元组
def fun_test5(x,*avgs):
    print(x)
    print(avgs)
#调用有两种方式
fun_test5(10,11,12,13,14,15)
fun_test5(10,*[11,12,13,14,15])
fun_test5(10,*(11,12,13,14,15))

# def fun_test6(x,**kvavgs):
#     print(x)
#     print(kvavgs)
#这样调用会报错,因为第一个形式参数,已经给x赋值了,后面的 实参有给x赋值,所以报错,可以讲参数名换一下
#这种传递的是一个字典,是以实参方式,python封装成字典
def fun_test6(a,**kvavgs):
    print(a)
    print(kvavgs)
fun_test6("a",x="b",y="c",z="d")

#多返回值
def fun_test7():
    return 0,"a",("b","c"),["d","e","e"],{"f","g"},{"name":"zhang","age":20}

res = fun_test7()
#这种将返回结果变成一个元组返回
print(res)
#递归函数,函数自己调用自己
#递归函数必须有一下三个特别:1.有明确的结束条件,2每次进入更深一层,问题规模比上一次相应减少(下一层,使用上一层的结果)3递归效率不高
#求一个数,最终不能被2整除的余数

#当需要递归函数返回值的时候,调用递归的地方必须return ,这样才能把下层的结果返回给上层
def fun_recursive(n):
    if n % 2 != 0:
        return n
    else:
        return fun_recursive(n/2)
n = fun_recursive(30)
print(n)

#高阶函数,就是函数的参数是个函数

def fun_HighOrde(x,y,f):
    print(f(x)+f(y))

fun_HighOrde(20,6,fun_recursive)

 


  

 

python第三天学习复习,集合set,文件操作,函数(普通函数,递归,高阶函数),字符编码和解码

标签:去掉   问题   效率   png   不能   nbsp   两种   unicode编码   文件的   

原文地址:http://www.cnblogs.com/zylong1201/p/8005131.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!