Python之函数之路
2016-08-11 18:23
295 查看
1 集合
集合是一个无序的,不重复的数据组合,它的主要作用如下:去重,把一个列表变成集合,就自动去重了
关系测试,测试两组数据之前的交集、差集、并集等关系
创建集合
a = {3, 5, 9, 9, 10} print(a) b = ([1, 2, 4, 6, 8, 8, 9]) print(b) ----------运行结果----------- {9, 10, 3, 5} // a集合 {8, 1, 2, 4, 6, 9} // b集合
并集、交集、差集、对称差集
c = a | b //并集 c = a.union(b) ----------运行结果----------- {1, 2, 3, 4, 5, 6, 8, 9, 10} c = a & b // 交集 c = a.intersection(b) ----------运行结果----------- {9} c = a - b // 差集 c = a.difference(b) ----------运行结果----------- {10, 3, 5} c = a ^ b // 对称差集(项在t中,但不会出现在二者中) c = a.symmetric_difference(b) ----------运行结果----------- {1, 2, 3, 4, 5, 6, 8, 10} a.add('x') // 添加一项 ----------运行结果----------- {'x', 9, 10, 3, 5} a.update('x','e','r') // 添加多项 ----------运行结果----------- {3, 5, 'e', 9, 10, 'x', 'r'} a.remove(3) ----------运行结果----------- {9, 10, 5} len(a) ----------运行结果----------- 4 >>> 3 in a ----------运行结果----------- True >>> c=set([3,5]) >>>> c.issubset(a) // c中的元素是否全在a中 >>>> c<=a ----------运行结果----------- True a.copy() // 浅复制 ----------运行结果----------- set([9, 10, 3, 5])
2 文件操作
对文件操作流程打开文件,得到文件句柄并赋值给一个变量
通过句柄对文件进行操作
关闭文件
基本操作
f = open('lyrics') #打开文件 first_line = f.readline() print('first line:',first_line) #读一行 print('我是分隔线'.center(50,'-')) data = f.read()# 读取剩下的所有内容,文件大时不要用 print(data) #打印文件 f.close() #关闭文件
打开文件的模式有:
r,只读模式(默认)。
w,只写模式。【不可读;不存在则创建;存在则删除内容;】
a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
r+,可读写文件。【可读;可写;可追加】
w+,写读
a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
rU
r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
rb
wb
ab
3字符编码和解码
Python2.x
#-*-coding:utf-8-*- __author__ = 'Alex Li' import sys print(sys.getdefaultencoding()) msg = "我爱北京天安门" msg_gb2312 = msg.decode("utf-8").encode("gb2312") gb2312_to_gbk = msg_gb2312.decode("gbk").encode("gbk") print(msg) print(msg_gb2312) print(gb2312_to_gbk)
Python 3.x
#-*-coding:gb2312 -*- #这个也可以去掉 __author__ = 'Alex Li' import sys print(sys.getdefaultencoding()) msg = "我爱北京天安门" #msg_gb2312 = msg.decode("utf-8").encode("gb2312") msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode,喜大普奔 gb2312_to_unicode = msg_gb2312.decode("gb2312") gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8") print(msg) print(msg_gb2312) print(gb2312_to_unicode) print(gb2312_to_utf8)
4 函数的定义
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可特性:
减少重复代码
使程序变的可扩展
使程序变得易维护
语法定义
def sayhi():#函数名 print("Hello, I'm nobody!") sayhi() #调用函数
可以带参数
#下面这段代码 a,b = 5,8 c = a**b print(c) #改成用函数写 def calc(x,y): res = x**y return res #返回函数执行结果 c = calc(a,b) #结果赋值给c变量 print(c)
5 函数参数与局部变量
形参:变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
def fun(x,y): # 形参 res = x*y return res c = fun(a,b) # 实参
默认参数
def stu_register(name,age,country,course): print("----注册学生信息------") print("姓名:",name) print("age:",age) print("国籍:",country) print("课程:",course) stu_register("王山炮",22,"CN","python_devops") stu_register("张叫春",21,"CN","linux") stu_register("刘老根",25,"CN","linux")
发现 country 这个参数 基本都 是"CN", 就像我们在网站上注册用户,像国籍这种信息,你不填写,默认就会是 中国, 这就是通过默认参数实现的,把country变成默认参数非常简单
def stu_register(name,age,course,country="CN"):
这样,这个参数在调用时不指定,那默认就是CN,指定了的话,就用你指定的
stu_register(age=22,name='alex',course="python",)
正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。
非固定参数
def stu_register(name,age,*args): # *args 会把多传入的参数变成一个元组形式 print(name,age,args) stu_register("Alex",22) #输出 #Alex 22 () #后面这个()就是args,只是因为没传值,所以为空 stu_register("Jack",32,"CN","Python") #输出 # Jack 32 ('CN', 'Python')
*kwargs 会把多传入的参数变成一个dict形式
def stu_register(name,age,*args,**kwargs): # *kwargs 会把多传入的参数变成一个dict形式 print(name,age,args,kwargs) stu_register("Alex",22) #输出 #Alex 22 () {}#后面这个{}就是kwargs,只是因为没传值,所以为空 stu_register("Jack",32,"CN","Python",sex="Male",province="ShanDong") #输出 # Jack 32 ('CN', 'Python') {'province': 'ShanDong', 'sex': 'Male'}
全局与局部变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
6 返回值
要想获取函数的执行结果,就可以用return语句把结果返回注意:
函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
如果未在函数中指定return,那这个函数的返回值为None
7 递归
def calc(n): print(n) if int(n/2) ==0: return n return calc(int(n/2)) calc(10) 输出: 10 5 2 1
递归特性:
必须有一个明确的结束条件
每次进入更深一层递归时,问题规模相比上次递归都应有所减少
递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
8 高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
def add(x,y,f): return f(x) + f(y) res = add(3,-6,abs) print(res)
相关文章推荐
- 【python】lxml
- 使用 py.test 对 python 代码进行测试
- Python中input和raw_input的一点区别
- 第一个python程序,小爬虫--抓取网页图片
- python操作XML方法之SAX
- Python处理Excel 写入,读取和追加
- python中pd.read_sql()读取多个select后得到多个datafram
- Python画图基本方法总结
- ImportError:cannot import name game
- python中selenium操作下拉滚动条方法汇总
- 安装MySQL-python
- 记一次Pyhthon爬虫其之一——提交表单、模拟登录
- minepy 包——基于最大信息的非参数估计
- Python 实现的关键词查找小工具
- NameError: name 'exception' is not defined
- 《Python 编程》笔记(十七)
- 《Python 编程》笔记(十六)
- 《Python 编程》笔记(十五)
- 《Python 编程》笔记(十四)
- 《Python 编程》笔记(十三)