一、数据类型分类:

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开发之【集合、函数和过程】相关推荐

  1. 如何用python生成软件_python中的生成器函数是如何工作的?

    1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函数相关的栈帧,则必须在调用这个函 ...

  2. python定义匿名函数关键字_python语言的匿名函数、7种可调用对象以及用户定义的可调用类型...

    匿名函数 在python表达式中,用来创建匿名函数的是lambda关键字. lambda函数在python语言中只能使用纯表达式,也就是说,在lambda函数体中不能使用while和try,当然也不能 ...

  3. python装饰器打印函数执行时间_python装饰器计算函数执行时间

    原博文 2020-04-26 13:47 − import time import logging from functools import wraps import datetime log = ...

  4. python函数结构_Python代码结构:函数

    欢迎关注「issnail」 "一起学习,一起成长!" 1.定义函数与调用函数 定义python函数:依次输入def.函数名.带有函数参数的圆括号,最后紧跟一个冒号(:) 函数命名规 ...

  5. python规定的函数头部_Python基础手册23——函数的调用

    三.函数的调用 Python 语言中调用函数与在其它高级语言中一样, 函数名加上函数运算符(一对小括号). 括号之间是所有可选的参数. 即使一个参数也没有, 小括号也不能省略.函数在调用之前必须先定义 ...

  6. python itemgetter函数用法_Python中的sorted函数以及operator.itemgetter函数

    operator.itemgetter函数 operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1, ...

  7. python 一等公民_Python中一等公民——函数

    Python中"一等公民"--函数 Python的函数是"一等公民". 你可以将它们分配给变量,将它们存储在数据结构中,将它们作为参数传递给其他函数,甚至将它们 ...

  8. python中format函数作用_Python代码中format函数具有哪些功能呢?

    摘要: 下文讲述Python代码中format函数的功能说明,如下所示: format函数功能说明 format函数功能: 用于格式化字符串 format函数语法: format采用{} 和 : 来代 ...

  9. python 返回函数 闭包_python中闭包Closure函数作为返回值的方法示例

    前言 首先看看闭包的概念:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数.这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外 ...

最新文章

  1. 有理有据:一篇来自前端同学对后端接口的吐槽!
  2. JSP的getRequestDispatcher()与sendRedirect()的区别
  3. 来自技术人的呐喊:回归本心,远离内卷
  4. oracle的group by用法
  5. EasyUI学习笔记8:MIS开发利器_ datagrid插件(下)(终结篇)
  6. NO.34 关于禅道加密
  7. SpringMVC : SpringMVC注解
  8. 本地算术验证码识别教程
  9. FFmpeg4.3.2之ffplay log输出级别(三十)
  10. VHDL:基于 FPGA 实时处理的双目测距系统
  11. log4j从入门到了解
  12. ios app 通过扫码下载ipa自动安装应用
  13. 在达沃斯使用约会软件是怎样一番体验
  14. 用html制作王者荣耀的界面,《王者荣耀》操作设置详解
  15. NVIDIA Jetson之GPIO引脚设置
  16. idea复制项目并使用技巧
  17. Android 状态栏工具类(实现沉浸式状态栏 / 变色状态栏)
  18. 【机器学习的数学基础】(十五)信息论
  19. 错误:The ‘pycocotools>=2.0‘ distribution was not found and is required by the application
  20. 云服务器搭建减少物流信息成本,摩方谈物流运输:10大措施,控制物流运输成本!...

热门文章

  1. mac chrome 跨域
  2. C#LeetCode刷题-广度优先搜索
  3. 区块链原理设计与应用_我如何设计一个可以在6个月内吸引200K用户的区块链应用...
  4. 深度学习去燥学习编码_请学习编码
  5. ubuntu 16.04安装VMwareTools
  6. markdown入门2-插入图片
  7. Python面试题【315+道题】
  8. 从零搭建Redis-Scrapy分布式爬虫
  9. 案例三:执行 JavaScript 语句
  10. 选择排序 - python实现详解