python入门3

news/2024/11/16 8:23:57/

python入门3 函数

1.Python中的函数

  • 函数的意义:
     1.对输入进行变换映射后输出
     2.过程化 VS 结构化
  • 函数的创建及结构:
     定义函数名
     参数
     函数体
     返回 :
     有无返回
     return与yield的区别(用yield后函数就变成一个生成器 每次用yield会记录函数运行到哪一步了 用next(函数)可以继续运行)
函数实际上是对功能的一种封装
def foo (num)for i in range(num):cumsum+=ireturn cumsum    这里有返回值

2.函数中的参数

  • 参数:
    语法:func(positional_args,keyword_args,*tuple_nonkw_args,**dict_kw_args)
  • 按参数传递方式:
     位置参数(定位参数,非关键字参数) :位置顺序十分重要
     关键字参数:
def foo3(intro(关键字)='123')print(intro)

 位置参数包裹及使用*

参数数量不确定
def mysun(*args)return sun(args)

 关键字参数包裹及使用**

def filmInfo(**kwargs):print(type(kwargs))for key,values in kwargs.items():print(key,':',values)filmInfo(film='羞羞的铁拳',box=3.5)filmInfo(film='羞羞的铁拳',box=3.5,rate=7.9)

 包裹解包顺序 :首先拆位置参数包裹,按顺序给必选,默认,可变。再拆关键字参数包裹
 传递参数时使用包裹

l1=[1,5,6,7,2,5,3,5,9,6,3,4]
def mysum(*args)return sum(args)mysum(*l1)  数组带星号输出结果:(1,5,6,7,2,5,3,5,9,6,3,4)这里不再是求和是一个一个输出,因为是包裹相当于mysum(1.5.7.....)  一个一个参数输入
  • 按参数的类型:
     必选(位置参数)
     关键字/默认
     *args可变长位置参数,**kwargs可变长关键字参数
  • 函数如何处理传入参数:
     值传递参数(函数前后参数不变,参数为不可变类型)与指针传递参数(函数前后参数有改变,指针参数一般为数组)
    3.变量作用域
  • 标识符的作用域
  • 全局变量
     定义 :所有函数外部的一个变量
     经过函数时
     然后,除非被del(主动删除)
  • 局部变量
     函数内部创建与访问
     函数被调用结束时结束,
  • 变量的搜索顺序
     覆盖问题
     局部作用域->全局作用域
    □locals()#局部名称空间 (可以在运行框中看有什么方法)
    □globals()#全局名称空间 (可以在运行框中看有什么方法)
    4.偏函数PFA
  • 偏函数Partial function application
     使用场景:如果一个函数的参数很多,而在每次调用的时候有一些又经常不需要被指定时(几个参数固定),就可 以使用偏函数(近似理解为默认值)
     语法:partical(func,*args,**keywords)
     使用:from functools import partial
     原理:创建一个新函数,固定住原函数的部分参 数(可以为位置参数,也可以是关键字参数)
将一个16进制的数转换成10进制
import functools
hex2int=functools.partial(int,base=16)     偏函数hex2int('F') 
结果:15

5.递归函数

  • 定义:  函数在内部调用自身
  • 例子:  求一个列表中数值的累加
递归的方法求一个列表中的值得累加
def fool(num):if len(num)==1return num[0]else:return num[0]+fool(num[1: ])fool([1,2,31,5,6,55])
结果:100

6.高阶函数

  • 函数的引用与调用
     引用:访问,变量别名(多个别名引用)
     调用:函数() (这样就用了这个函数)
  • 函数对象既然可以被引用,那可以作为参数被传入或作 为结果被返回吗?
    可以
  • 高阶函数:  一个函数接收另一个函数作为参数
def myfoo(num,func):return func(num)      func是一个函数myfoo([1,3,5,76,99],max)
结果:99
  • 回调函数:  函数作为调用函数的结果返回
    7.BIFs中的高阶函数(内置的)
  • filter  核心点:在list中对每个元素做过滤
  • map  核心点:对每个元素做映射
  • reduce
     核心点:list内元素两两操作传给func ,然后继续两两运算直到list走完
     Python 3.x中,reduce()函数已经被从全局名字 空间里移除了,它和partical一样被放置在 fucntools模块中。使用前需要调用.
    8.匿名函数lambda(简化函数)
  • 匿名函数lambda:
     使用场景:
     返回简单结束 ,不需要专门定义函数
     特点:  简洁,同一行定义体+声明。不用写return
     定义:  定义后,赋值给一个变量,做正常函数使用 foo=lambda x,y:x+y
     lambda关键字定义在高阶函数的参数位上
     语法:  lambda(args1,args2, argsN):expression
    9.闭包Closure
  • 闭包的概念  涉及嵌套函数时才有闭包问题  内层函数引用了外层函数的变量(参数),然后 返回内层函数的情况,称为闭包(Closure)。  这些外层空间中被引用的变量叫做这个函数的环 境变量。  环境变量和这个非全局函数一起构成了闭包。
def fool(nums_in_function):print('nums_in_function此时在fool中,可以被访问:',nums_in_function)def foot2():return max(nums_in_function)   虽然没有给foot2任何参数,但foot2却能访问到fool中的参数return foot2fool([5.3.8])
结果:8
  • 闭包的特点:  函数会记住外层函数的变量
  • 闭包的实现:
    10.装饰器Decorator
  • 定义:  以函数作参数并返回一个替换函数的可执行函数
  • 简单理解:  装饰器的作用就是为已存在的对象添加额外功能  为一个函数增加一个装饰(用另一个函数装饰)  本质上就一个返回函数的高阶函数
  • 应用:  给函数动态增加功能(函数)
  • 定义与使用:
import datetime
def extrafoo(func):def inner():print('extra:',datetime.now())print('from inner to execute:'func._name_)print('the',func._name_,'result:',func())return inner@extrafoo      @是python装饰器的简便写法,也叫语法糖  
def fool():return 'this is fool function'执行:fool()    装饰器里的内容在函数中也会打印

11.函数式编程Functional Programming

  • 函数式编程思想:  函数是第一等公民First Class  函数式编程是一种编程范式,是如何编写程度的方法论。 把运算过程尽量变成一系列函数的调用。属于结构化编程
  • 特点:  允许函数作为参数,传入另一个函数  返回一个函数
  • 理解:  结合本章知识点,案例进行理解

http://www.ppmy.cn/news/590924.html

相关文章

正则表达式高阶(三)

前言 很久没写文章了,今年由于种种原因年初休息了两个月,后面又由于今年的环境被休息了两个月,端午节过后终于开始上班了,只是这个班比想象中要忙很多。趁着晚上这会儿不想撸代码,便把最近撸代码时的一些正则的心得记…

Python 解析 XML

1 简介 XML 全称 Extensible Markup Language,中文译为可扩展标记语言。XML 之前有两个先行者:SGML 和 HTML,率先登场的是 SGML, 尽管它功能强大,但文档结构复杂,既不容易学也不易于使用,因此几…

Qt QSqlTableModel详解

背景知识: Qt SQL的API分为不同层: 驱动层 驱动层 对于QT是基于C来实现的框架,该层主要包括QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorbase、QSqlDriverPlugin and QSqlResult。这一层提供了特定数据库和SQL API层之间的底层桥梁…

基于Arduino UNO的循迹小车

目录 1.analogWrite函数的使用 2.红外循迹模块介绍 3.循迹小车代码实现 4.实物示例 1.analogWrite函数的使用 用analogWrite来替换digitalWrite 说明 将一个模拟数值写进Arduino引脚。这个操作可以用来控制LED的亮度, 或者控制电机的转速. 在Arduino UNO控制器中&#…

【人工智能】推荐系统

推荐系统是什么? 推荐系统是用于海量数据信息过载情况下,为用户主动快速从海量数据中推荐出符合用户需求,符合永华特点的物品/人/视频/音乐等等 推荐系统的三个参与方: 1、用户 2、物品(商家/店家) 3、提…

android 手机推荐,2018年安卓机皇推荐,这几款是真的不错

原标题:2018年安卓机皇推荐,这几款是真的不错 不知不觉,2018年悄然过去大半,今年的手机市场发展情况可以用日新月异来描述了。回看前半年,安卓手机市场风起云涌,不断涌现出口碑和质量俱佳新产品。 OPPOR15,…

2022双十一买什么好?行家推荐四大最值得入手的数码好物

又到了一年一度的“双棍节”,在这种节点,一般都会迎来一批物品的历史最低价。那么,在今年的双十一买什么比较好呢?下面,我来总结四款行家都在推荐的最值得入手的数码好物,感兴趣的朋友一起来看看吧。 一、…

双十一有哪些数码产品值得买、这几款高性价比好物超值

对于中国的消费者来说,一年一度的双十一购物狂欢节一定是不能错过的。为了促销产品,双十一期间无论是生活用品还是数码产品,都会有大额优惠。尤其是数码产品,从近几年的情况来看,双十一期间会有数百元乃至上千元的优惠…