python 函数 过程_Python开发之【集合、函数和过程】
一、数据类型分类:
1、可变不可变:通过id查看内存地址,修改后,内存地址改变的,则是不可变类型。反之可变
可变:列表,字典
不可变:字符串,数字,元组
2、访问顺序:
直接访问:数字
顺序访问:字符串,列表,元组
映射:字典
3、按存值个数:
标量/原子类型:数字,字符串
容器类型:列表,元组,字典
二、集合 set
由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key
1、创建一个集合:两种方法
1) se = {1,2,3,4,3}
2) list1 = set ([1,2,6,4,5,3,7])
list2 = set ((5,6,7,8,9,0))
2、特性:
1)、不同元素组成(不能重复)
2)、无序
3)、集合中元素必须是不可变类型
3、方法:
1)、添加,注:只能添加一个值
se.add("a") print(se)
2)、清除 se.clear() print(se)
3)、删除
se.add("a")
se.add("b")
print(se)
a. 随机删除一个元素
se.pop()
print(se)
b.指定删除一个元素
se.remove("b")
se.remove("c")#元素不存在,则报错
print(se)
se.discard("a")
se.discard("c")#元素不存在,不会报错
print(se)
list1 = set ((1,2,6,4,5,3,7))
list2 = set ((5,6,7,8,9,0))
print(list1)
print(list2)
4、取交集
print(list1.intersection(list2))
print(list1 & list2)
5、取并集
print(list1.union(list2))
print(list1 | list2)
6、差集
print(list1.difference(list2))#从list1中取,取出list1里有而list2里没有的
print(list1 - list2)
print(list2.difference(list1))#从list2中取,取出list2里有而list1里没有的
print(list2 - list1)
7、对称差集
print(list1.symmetric_difference(list2))#取出list1和list2互相都没有的元素作为一个集合
print(list1 ^ list2)
8、子集
list3 = set ([1,2,3])
print(list1.issubset(list2))#判断list1是否是list2的子集
print(list3.issubset(list1))
print(list1.issuperset(list3))#判断list1是否是list3的父集
print(list1.isdisjoint(list2))#判断是否有交集,没有交集为True,反之False
9、更新
list1.difference_update(list2)#取差集并更新list1
print(list1)
print(list2)
list1.intersection_update(list2)#取交集并更新list1
print(list1)
print(list2)
list1.add(9)
list1.update(list2)#更新集合,可以更新多个值,必须是可迭代值
print(list1)
print(list2)
三、函数和过程
函数:是逻辑化和过程化的一种编程方法
过程:过程就是没有返回值的函数,Python中隐示的返回None
1、优点:
1)减少重复代码
2)保持一致性
3)代码易扩展
2、函数定义
def test(x):
"这里写描述"
x += 1
return x
注:
def:定义函数的关键字
test:函数名
():内可定义形参
"":文档描述
x+=1:泛指代码块或程序处理逻辑
return:定义返回值
3、定义函数
def func1 ():
"打印this is func1"
print("this is func1")
return 0
#定义过程:过程就是没有返回值的函数,Python中隐示的返回None
def func2():
"打印this is sfunc2"
print("this is func2")
4、函数和过程的调用
x=func1()#x接收func1的返回值,返回值为0
y=func2()#y接收func2的返回值,返回值为None
print("from func1 return is %s" %x)
print("from func2 return is %s" %y)
5、return返回值
def test1():
print("this is test1")
return 0#结束函数并返回值0
print("end function")#这行代码不会执行,return结束函数
test1()
x = test1()#x接收test1函数的返回值
print(x)
def test1():
"this is test1"
print("this is test1")
def test2():
"this is test2"
print("this is test2")
return 0
def test3():
"this is test3"
print("this is test3")
return 1,"hello",["aaa","bbb"],{"name":"helong"}#可以返回多个值,类型不限。返回一个元组
x=test1()
y=test2()
z=test3()
6、参数
def test1(x,y):#x,y为形参
print("this is first ",x)
print("this is second",y)
test1(1,2)#1,2为实参。位置参数调用,数量和顺序必须一一对应
test1(y=1,x=2)#关键字调用,无须固定位置
test1(x=2,3)#如果即有位置参数,又有关键字参数,要保证关键字参数不参写在位置参数的前面
默认参数
def test(x,y=2):
print(x)
print(y)
test(1)或者test(1,3)#调用函数时,默认参数非必须传递
7、参数组
参数组:针对于实参数目不固定,将形参定义为参数组*args
def test(*args):
print(args)#输出结果为一个元组
test(1,2,3,4,5)
#结合位置参数
def test1(x,*args):
print(x)
print(args)
test1(1,2,3,4,5,6)#接收N个位置参数转换为元组的方式
test1(*[1,2,3,4,5,6,7])
接收字典
def test2(**kwargs):
print(kwargs)
test2(name="heilong",age=25,sex="男")#把N个关键字参数转为字典的方式
test2(**{"name":"heilong","age":25})
8、局部变量和全局变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用
注意:代码规范,全局变量全大写,局部变量全小写
1) #p全局变量
p = "heilong"
def func1 ():
a = 123#a局部变量,只在在func1中使用
print(a)
# print(a)#报错,a没有定义
print(p)
def func2 ():
a = 456
print(p)#全局变量可以在任意地方使用
print(a)
func1()
func2()
2) p全局变量
p = "heilong"
def func1 ():
#a局部变量,只在在func1中使用
a = 123
# 这里不会修改全局变量p的值,只是在func1中又创建了个局部变量p,值为"xiaodong"
#如果非要在局部改变全局变量的值,则在局部声明全局变量
global p
p = "xiaodong"
print(a)
print(a)#报错,a没有定义
print(p)
3)nonlocal:找上一级同名的局部变量
1 nonlocal:找上一级同名的局部变量2 name = "heilong"
3
4 deffun2 ():5 name = "qeqwer"
6 print(name)7 deffun1():8 nonlocal name9 name = "aaaaa"
10 print(name)11 fun1()12
13 print(name)14 fun2()15 print(name)16 #############################
17 #报错:
18 #nonlocal name
19 #SyntaxError: no binding for nonlocal 'name' found
20 name = "heilong"
21
22 deffun1():23 nonlocal name24 name = "aaaaa"
25 print(name)26
27 print(name)28 fun1()29 print(name)30 ######################
31 #nonlocal:找上一级同名的局部变量,找不到报错
32 name = "heilong"
33
34 deffun2 ():35 na = "qeqwer"
36 print(na)37 deffun1():38 nonlocal name39 name = "aaaaa"
40 print(name)41 fun1()42
43 print(name)44 fun2()45 print(name)
View Code
9、前向引用之'函数即变量'
10、函数嵌套
11、递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数
递归特性:
1). 必须有一个明确的结束条件
2). 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3). 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack
这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。
由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
1 defcal(n):2 print(n)3 if int(n/2)==0:4 returnn5 return cal(int(n/2))#返回值是cal(int(n/2)),又调用cal()
6
7 cal(20)
View Code
1 person_list=['alex','wupeiqi','linhaifeng','yuanhao']2
3 defaskway(person_list):4 if len(person_list) ==0:5 return "没人知道路"
6 person =person_list.pop(0)7 if person == "linhaifeng":8 return "linhaifeng知道路,路在前方"
9 res =askway(person_list)10 returnres11
12 res =askway(person_list)13 print(res)
View Code
12、匿名函数
匿名函数就是不需要显式的指定函数
1 defcalc(n):2 return n*n3
4 print(calc(10))5
6 print(lambda n:n*n)#输出个内存地址
7 v=lambda n:n*n8 print(v(10))
View Code
13、作用域
作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变
1 name = "heilong"
2
3 deffun1():4 name = "xiaohei"
5 deffun2():6 name = "heihei"
7 print(name)8 returnfun29
10 v =fun1()11 print(v)#输出一个fun2的内存地址
12 v()#相当于调用fun2()
13
14
15 name = "heilong"
16
17 deffun1():18 name = "xiaohei"
19 print(name)20 deffun2():21 name = "heihei"
22 print(name)23 deffun3():24 print(name)25 returnfun326 returnfun227
28 fun1()()()
View Code
14、map函数
map()处理序列中的每个元素,得到的结果是一个‘列表’,该‘列表’元素个数及位置与原来一样
1 ###### 1 自加1 只能处理这一个逻辑
2 li = [1,6,2,4,9]3
4 deffun_add(list_obj):5 li_new =[]6 for i inlist_obj:7 li_new.append(i+1)8 returnli_new9
10 print(fun_add(li))11
12
13 ######## 2 可以自定义多个逻辑
14 defadd_(x):15 return x+1
16 defzijian(x):17 return x-1
18 defpingfang(x):19 return x**2
20
21 li = [1,6,2,4,9]22 deffun_test(func,list_obj):23 li_new =[]24 for i inlist_obj:25 res =func(i)26 li_new.append(res)27 returnli_new28
29 print(fun_test(add_,li))30 print(fun_test(zijian,li))31 print(fun_test(pingfang,li))32
33 ######## 3 自定义逻辑可以写成匿名函数lambda
34 li = [1,6,2,4,9]35 deffun_test(func,list_obj):36 li_new =[]37 for i inlist_obj:38 res =func(i)39 li_new.append(res)40 returnli_new41
42 print(fun_test(lambda x:x+1,li))43 print(fun_test(lambda x:x-1,li))44 print(fun_test(lambda x:x**2,li))45
46
47 ########## 4 内置函数map()
48 li = [1,6,2,4,9]49 print(list(map(lambda x:x+1,li)))50 print(list(map(lambda x:x-1,li)))51 print(list(map(lambda x:x**2,li)))
map实现过程
15、filter函数
filter遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来
1 ##### 1
2 li = ["xiaodong","heilong","xiaodun"]3
4 defxiao_strart(li_obj):5 li_new =[]6 for i inli_obj:7 if i.startswith("xiao"):8 li_new.append(i)9 returnli_new10
11 print(xiao_strart(li))12
13 ####### 2
14 li = ["xiaodong","heilong","xiaodun"]15
16 defstart(a):17 return a.startswith("xiao")18 defend(a):19 return a.endswith("g")20
21 deffun1(func,list_obj):22 li_new=[]23 for i inlist_obj:24 iffunc(i):25 li_new.append(i)26 returnli_new27
28 print(fun1(start,li))29 print(fun1(end,li))30
31 ######## 3
32 li = ["xiaodong","heilong","xiaodun"]33 deffun1(func,list_obj):34 li_new=[]35 for i inlist_obj:36 iffunc(i):37 li_new.append(i)38 returnli_new39
40 print(fun1(lambda a:a.startswith("xiao"),li))41 print(fun1(lambda a:a.endswith("g"),li))42
43 ########## 4
44 li = ["xiaodong","heilong","xiaodun"]45 print(list(filter(lambda a:a.startswith("xiao"),li)))#filter返回一个可迭代对象,要用list转为列表
46 print(list(filter(lambda a:a.endswith("g"),li)))
filter实现过程
16、reduce函数
reduce:处理一个序列,然后把序列进行合并操作
1 #!/usr/bin/env python
2 #-*- coding:utf-8 -*-
3 from functools importreduce4
5 ##### 1
6 li = [1,2,3,4,5]7
8 sum_num =09 for i inli:10 sum_num +=i11 print(sum_num)12
13 ######### 2
14 li = [1,2,3,4,5]15 defsum_li(list_obj):16 sum_num =017 for i inlist_obj:18 sum_num +=i19 returnsum_num20
21 print(sum_li(li))22
23 ####### 3
24 li = [1,2,3,4,5]25
26 defsum_list(list_obj):27 start =list_obj.pop(0)28 for i inlist_obj:29 start +=i30 returnstart31
32 print(sum_list(li))33
34 ###### 4
35 li = [1,2,3,4,5]36
37 defsum_num(n,m):38 return n+m39 defleicheng(x,y):40 return x*y41
42 deffun1(func,list_obj):43 start =list_obj.pop(0)44 for i inlist_obj:45 start =func(start,i)46 returnstart47
48 print(fun1(sum_num,li))49 print(fun1(leicheng,li))50
51 ###### 5
52 li = [1,2,3,4,5]53 print(reduce(lambda x,y:x+y,li))54 print(reduce(lambda x,y:x*y,li))55
56 ######## 6 可以指定初始值
57 li = [1,2,3,4,5]58 print(reduce(lambda x,y:x+y,li))59 print(reduce(lambda x,y:x*y,li,100))
reduce实现过程
python 函数 过程_Python开发之【集合、函数和过程】相关推荐
- 如何用python生成软件_python中的生成器函数是如何工作的?
1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函数相关的栈帧,则必须在调用这个函 ...
- python定义匿名函数关键字_python语言的匿名函数、7种可调用对象以及用户定义的可调用类型...
匿名函数 在python表达式中,用来创建匿名函数的是lambda关键字. lambda函数在python语言中只能使用纯表达式,也就是说,在lambda函数体中不能使用while和try,当然也不能 ...
- python装饰器打印函数执行时间_python装饰器计算函数执行时间
原博文 2020-04-26 13:47 − import time import logging from functools import wraps import datetime log = ...
- python函数结构_Python代码结构:函数
欢迎关注「issnail」 "一起学习,一起成长!" 1.定义函数与调用函数 定义python函数:依次输入def.函数名.带有函数参数的圆括号,最后紧跟一个冒号(:) 函数命名规 ...
- python规定的函数头部_Python基础手册23——函数的调用
三.函数的调用 Python 语言中调用函数与在其它高级语言中一样, 函数名加上函数运算符(一对小括号). 括号之间是所有可选的参数. 即使一个参数也没有, 小括号也不能省略.函数在调用之前必须先定义 ...
- python itemgetter函数用法_Python中的sorted函数以及operator.itemgetter函数
operator.itemgetter函数 operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1, ...
- python 一等公民_Python中一等公民——函数
Python中"一等公民"--函数 Python的函数是"一等公民". 你可以将它们分配给变量,将它们存储在数据结构中,将它们作为参数传递给其他函数,甚至将它们 ...
- python中format函数作用_Python代码中format函数具有哪些功能呢?
摘要: 下文讲述Python代码中format函数的功能说明,如下所示: format函数功能说明 format函数功能: 用于格式化字符串 format函数语法: format采用{} 和 : 来代 ...
- python 返回函数 闭包_python中闭包Closure函数作为返回值的方法示例
前言 首先看看闭包的概念:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数.这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外 ...
最新文章
- 有理有据:一篇来自前端同学对后端接口的吐槽!
- JSP的getRequestDispatcher()与sendRedirect()的区别
- 来自技术人的呐喊:回归本心,远离内卷
- oracle的group by用法
- EasyUI学习笔记8:MIS开发利器_ datagrid插件(下)(终结篇)
- NO.34 关于禅道加密
- SpringMVC : SpringMVC注解
- 本地算术验证码识别教程
- FFmpeg4.3.2之ffplay log输出级别(三十)
- VHDL:基于 FPGA 实时处理的双目测距系统
- log4j从入门到了解
- ios app 通过扫码下载ipa自动安装应用
- 在达沃斯使用约会软件是怎样一番体验
- 用html制作王者荣耀的界面,《王者荣耀》操作设置详解
- NVIDIA Jetson之GPIO引脚设置
- idea复制项目并使用技巧
- Android 状态栏工具类(实现沉浸式状态栏 / 变色状态栏)
- 【机器学习的数学基础】(十五)信息论
- 错误:The ‘pycocotools>=2.0‘ distribution was not found and is required by the application
- 云服务器搭建减少物流信息成本,摩方谈物流运输:10大措施,控制物流运输成本!...