#函数使用

零碎知识

  • 灵活的if-else

    a = 3 if False else 5
    # 等价于
    if False:
    a = 3
    else:
    a = 5
  • 灵活的and/or

    # 当前面为真,才会进行后面的运算
    b = True and 3
    # 当前面为假,后面就不会运算了
    # b = False and 3 # 当前面的值为真,后面就不需要了
    # a = True or 5
    # 当前面的值为假,才会进行后面的运算
    a = False or 5
  • 类型的判断

    a = 10
    # if type(a) == int:
    if type(a) == type(1):
    print(a, '是整数') # 判断一个对象是否是一个类的实例(对象)
    # 是返回True,不是返回False
    print(isinstance(a, int))
    print(isinstance(a, float)) # 判断一个对象能否调用
    print(callable(test))

匿名函数

  • 函数可以像普通变量一样进行赋值

    def hello():
    print('Hello world') # __name__是函数的名字
    print(hello.__name__) # 可以像普通变量一样进行赋值
    a = hello print(a.__name__) hello()
    a()
  • 函数可以作为另一个函数的参数进行传递

    def add(a, b):
    return a + b # 将函数作为参数
    # 可以使函数的功能更加灵活多变
    def calc(a, b, func):
    return func(a, b) print(calc(3, 5, add))
  • 匿名函数的出现

    • 将函数作为参数时,若函数只使用一次,没有必要单独定义,然后再传递
    • 定义匿名函数需要使用关键字
      lambda
    • 定义格式:
      lambda 参数列表:表达式
      • lambda开头
      • 后面跟需要的参数,多个参数使用逗号隔开
      • 最后一个参数后跟上':'
      • 冒号后跟上表达式,这个表达式就是返回值,不需要使用return
    • 示例1:
    # 不需要先定义,然后再使用
    print(calc(5, 2, lambda a,b: a - b))
    • 示例2:
    lt = [
    {'name': 'xiaodu', 'age': 20, 'height': 170},
    {'name': 'xiaomin', 'age': 22, 'height': 167},
    {'name': 'xiaowang', 'age': 18, 'height': 160},
    {'name': 'xiaoma', 'age': 25, 'height': 180},
    ] def key(d):
    return d['age'] # lt.sort(key=key)
    # 使用匿名函数
    lt.sort(key=lambda d: d['height'])
    for i in lt:
    print(i)
    • 练习:实现列表的sort方法,要求可以指定key,可以逆序

闭包

  • 定义:

    • 外部函数中定义一个内部函数
    • 内部函数中使用外部函数的局部变量
    • 外部函数将内部函数作为返回值返回
    • 此时的内部函数就叫闭包
  • 示例:

    def wai(n):
    def nei():
    return n * n
    return nei f1 = wai(3)
    f2 = wai(2) print(f1())
    print(f2()) def wai(*args):
    def nei():
    ret = 0
    for i in args:
    ret += i
    return ret
    return nei f1 = wai(1, 2, 3)
    print(f1())

装饰器

  • 作用:当我们想要增加原有函数的功能,但是不想(或无法)改变原来的函数,可以通过装饰器来实现

  • 使用:

    • 首先定义一个装饰器函数,该函数接受一个函数作为参数,然后返回一个闭包
    • 在闭包中调用传递进来的函数,并且前后可以根据需要进行修饰
  • 示例:

    def zhuangshiqi(func):
    def wrapper():
    print('前面装饰')
    func()
    print('后面装饰')
    return wrapper @zhuangshiqi # 等价于test = zhuangshiqi(test)
    def test():
    print('hello') test()
  • 装饰器运用

    • 装饰无参无返回值的函数
    • 装饰带参无返回值的函数
    • 装饰带参有返回值的函数

练习:(实践拓展是练手的最好方法)

  • 实现列表的排序函数,要求支持逆序和指定排序标准(key)

  • 计算一个字符串中所有数字的和

  • 实现一个字符串的逆序函数

  • 返回一个列表中出现次数最多的元素

Python基础—07-函数使用(01)的更多相关文章

  1. python基础07 函数

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 函数最重要的目的是方便我们重复使用相同的一段程序. 将一些操作隶属于一个函数,以后 ...

  2. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  3. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  4. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  5. python基础——filter函数

    python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...

  6. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

  7. 八. Python基础(8)--函数

    八. Python基础(8)--函数 1 ● 函数返回布尔值 注意, 自定义的函数也可以是用来作逻辑判断的, 例如内置的startswith()等函数. def check_len(x):     ' ...

  8. python基础之函数详解

    Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...

  9. 01.Python基础-5.函数

    1 函数的介绍 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 内置函数 自定义函数 2 函数的定义和调用 2.1 函数的定义和调用 定义 def 函数名([参数]): 代码块 [ ...

  10. Day3 - Python基础3 函数、递归、内置函数

    Python之路,Day3 - Python基础3   本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...

随机推荐

  1. webbrowser使用已过期资源的一个报错

    如果webbrowser控件已更新,仍使用一个HtmlElement就会出现以下错误: 2013-12-23 17:33:48,375 [18] ERROR xx.xxx<Run>b__0 ...

  2. [转]JS组件系列——BootstrapTable 行内编辑解决方案:x-editable

    本文转自:http://www.cnblogs.com/landeanfen/p/5821192.html 阅读目录 一.x-editable组件介绍 二.bootstrapTable行内编辑初始方案 ...

  3. 安卓API版本

  4. SQL 表定时同步

    1.创建存储过程 create proc [dbo].[sync_calendar] as truncate table dbo.CalendarEvents insert into Calendar ...

  5. vscode插件推荐

    在扩展(Ctrl+Shift+X)中直接搜索这些插件的名字安装即可 1.HTML Snippets 超级使用且初级的H5代码片段以及提示 2.HTML CSS Support 让HTML标签上写cla ...

  6. mysql四-1:单表查询

    一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二.关键 ...

  7. 【Android】7.0 Intent向下一个活动传递数据、返回数据给上一个活动

    1.0 可以利用Intent吧数据传递给上一个活动,新建一个叫“hellotest01”的项目. 新建活动FirstActivity,勾选“Generate Layout File”和“Launche ...

  8. mfc自动创建按钮消息处理并清除

        以前参加一次面试有这道题,当时没有网络没有做出来,今天在网上整理了一下,实现如下. .h中增加下面代码     //生成的消息映射函数     virtual BOOL OnInitDialo ...

  9. Linux服务器性能评估与优化(二)

    网络内容总结(感谢原创) 1.Linux内核参数优化 内核参数是用户和系统内核之间交互的一个接口,通过这个接口,用户可以在系统运行的同时动态更新内核配置,而这些内核参数是通过Linux Proc文件系 ...

  10. OOM android

    1.[原创]Android 系统稳定性 - OOM(一) 2.[原创]Android 系统稳定性 - OOM(二) 3.Android内存泄露分析(MemoryAnalyzer工具)