Python教程

python基础5-变量/递归函数/函数式编程/内置函数

本文主要是介绍python基础5-变量/递归函数/函数式编程/内置函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  • 全局变量与局部变量

  • 顶头定义,或者叫没有缩进的定义变量,就叫全局变量
  • 在子程序中要对全局变量做操作,则申明global 变量名
  • 如果函数的内容无global关键字,优先读取局部变量,没有的话再读取全局变量,无法对全局变量重新赋值,但是对于可变类型,可以对内部元素进行操作,例如append,clear
  • 全局变量全部大写,局部变量全部小写,代码规范
  • 函数可以嵌套函数,在嵌套函数中,用nonlocal name可以申明位name为外层函数的同名变量,而不是全部变量
  • 前向应用

  • 风湿理论,函数即变量,在函数语句运行之前,函数已经被申明即可执行。这点跟变量一样
  • 函数定义时不会执行,在内存中开辟地址,变量名为门牌号,函数内容被当作字符串存入门牌中
  • 递归

  • 编程方法论:函数式编程中没有循环,都是递归
  • 递归特性:必须有一个明确的结束条件,否则是死循环,直接报错。在函数内满足条件时,执行return语句
  • 列表可以用person_list.pop(0),弹出列表的第一个元素
  • 加上断点分析,debug
  • 作用域

  • 函数名相当于函数的内存地址,加上()才是函数
  • return 函数名,即返回一个函数地址,函数地址()即可执行函数。return 可以接任意参数
  • 想拿到函数执行的地址,就让a= f()
  • 函数的作用域在申明时已经决定,跟调用位置无关
  • 匿名函数

  • 用lambda x:x+1,第一个x是形参,x+1是函数的返回值
  • func = lambda x:x+1,然后func(9)即可执行
  • lambda应该跟其他函数一块用,而不是func = lambda的形式,如map函数
  •  其中x+1的位置,一般是简单逻辑,而不是for循环,if判断等
  • 返回多个值时,需要自己加括号,lambda x,y,z: (x+1,y+1,z+1)
  • 函数式编程

  • 语言是用来跟计算机沟通的
  • 编程方法论,面对过程,函数式编程,面向对象
  • 面向过程,把大问题分成小问题,找到解决问题的入口,按照一个固定的流程去模拟解决问题的流程
  • 函数式编程= 编程语句定义的函数+数学意义的函数。定义好数学模型y=2*x+1,用python函数实现上述数学模型。hasell clean erlang是严格意义上的函数式编程语言
  • 面向过程,def cal(x):res = 2*x  res+=1  return res
  • 函数式编程的特性:不定义变量,不修改变量,直接往下操作。
  • 函数即变量,函数名可作为参数传递,返回值可以是函数名,叫高阶函数,装饰器会用到
  • return test1(),即先执行tets1(),返回函数test1的执行结果
  • 调用栈,多层嵌套函数的情况下,上层没执行完就要进入下一层时,要保留上一层运行情况,等下一层执行完,再回来执行上一层,称为调用栈
  • 尾调用优化:在函数的最后1步调用另外一个函数,这样上一层函数就不用保留了,相当于直接转入下一个函数。最后1行不一定是最后1步,例如if else判断
  • map函数。map(lambda x:x+1,num_1),第一个位置传函数名,不带()。第二个位置传实参。map执行逻辑,遍历第二个实参,每个都交给第一个位置函数处理一遍。map返回结果是个迭代器,需要外套list可转换为列表
  • filter函数。filter(lambda n:not n.endwith('sb'),movie_people),第一个参数是函数,第二个参数是可迭代对象,把第二个可迭代对象可循环遍历,拿出每个元素交给前边函数筛选一遍,得到布尔值,为true则保留
  • reduce函数。from funtools import reduce,先导入。把一个序列进行合并操作。reduce(lambda x,y:x+y, num_1 ,1),1为初始值,把列表num_1中的值遍历,交给lambda函数累加一遍
  • python内置函数

  • all([1,2,'1',''])判断每个元素的布尔值,全部为真,则all返回true
  • any跟all相反,只要有一个为真,就为真
  • bin()转换为十进制二进制,hex是十进制转16进制,oct是转换8进制
  • 编程时就是写了字符串,要想保存到硬盘上就要编码。存到内存中用unicode,硬盘上自己选择编码。
  • name = ‘你好’,bytes(name,encoding='utf-8').decode(utf-8),将字符串按照utf-8编码,1个汉字占用3个字节,然后解码。ASCII码不能编中文
  • divmod(10,3)结果(3,1),分页功能。用在搜索结果分页上,10个搜索结果,每页3条,则需要3+1页面显示结果
  • evel()功能,1,把字符串的数据结构提取出来,例如从字符串包含字典中,提取出字典来。2,可以把字符串中的数学运算做一遍
  • hash运算,1不论输入多长,输出定长,2不能根据输出反推出输入。同样输入,输出一一定,可校验软件安装包是否安全
  • help(dir)获取函数的帮助文档。dir获取函数有哪些模块。
  • isinstance(1,int),判断1是否为int类型
  • print(globals()),打印出全局变量,locals打印出局部变量
  • print(_file_)打印出文件路径
  • zip(('a','b','c'),(1,2,3)),拉链函数,生成三个元组('a',1),左边一个对应右边一个。zip前后两个参数,只要是序列类型即可,元组,列表,字符串都是序列类型
  • max函数和min是一对。第一步:处理的是可迭代对象,相当于一个for循环取出每个元素进行比较。第二步,元素之间比较大小是从每个元素的第一个位置依次比较

  • 比较字典的value值大小时,先用zip函数生成新的元组序列,然后max即可。不同数据类型不能比较。
  • max(people, key=lambda dic:dic['age'],将字典people中元素遍历取出,每个调用一遍lambda函数,然后比较大小
  • chr(97)和ord('a')是一对
  • pow(3,3,2),3的3次方,对2取余数。如果只有两个,叫3的3次方
  • round(3.5)。四舍五入
  • slice(1,4,2),对字符串切片,左闭右开,步长为2
  • type()查看元素的数据类型
  • vars(),如果没有实参,则等效于locals,即局部变量。如果有实参int,则将实参int的所有方法存储为字典形式
  • import,模块就是py文件。import不能导入字符串,_import_()导入的就是字符串类型文件
这篇关于python基础5-变量/递归函数/函数式编程/内置函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!