常用的函数:
callable():如果所给参数是可调用的,返回True 不可调用返回Fasle。这里指的是否能调用说的是方法、类方法等有doc string的东西,一个单纯的字符串等就不算了。

import string

#之前用过的join方法
#punctuation给出了可用的标点符号,他实际上就是一个字符串,里面给出了有效可用的标点符号。
print string.punctuation
print callable(string.join), callable(string.punctuation)

getattr():比较另类也很强大的一个函数,返回的是一个函数的引用

l = [1, 2, 3]
#返回引用
print getattr(l, 'pop') == l.pop
#加上括号就可以当作函数用了,另外pop()是删除list的最后一个元素然后将这个元素返回。
print getattr(l, 'pop')() == l.pop() #或者是getattr(模块名,'方法名/属性名'),这样也可以 #根据getattr的特点,他很适合做分发器
#根据传入的方法名不同调用不同函数,执行不同工作。
#如果传入的方法名不合法,可以这样做
getattr(model, 'somefunction', model.default_function)
#这样做的意思是:如果model中没有somefunc方法的话,就调用model.default_func

=======================
and  or:返回的不是具体True或False,而是返回运算的值。思路是:返回能决定运算结果的那个值。比如 1 or 2 ,1已经决定了运算结果是真,所以直接返回1。

#先看and
print 1 and 2#单单看1的话不能确定运算结果,具体要看第二个值的真假,所以这次结果应该返回2 print 0 and 2#这里看到0,那结果肯定是False,所以直接返回能决定结果的那个值,也就是0 #or和and技巧一样的
print 1 or 2#看到了1,那就确定了结果肯定是True,所以不用看第二个值直接返回1 print 0 or 2#这里看到的是0,但是不能确定最终结果是真假,所以是第二个值决定了最终结果,所以返回2

记得C一类语言的三元运算符么:bool?a:b,python虽然没有三元运算符,但是可以根据and or的返回值特点这样做:

#格式:(bool and [a] or [b])[0]
a = 'this is a'
b = 'this is b' #你会发现当bool为真时打印出的是a,反之则打印b,这跟c的三元运算符是一个效果
print (1 and [a] or [b])[0]
print (0 and [a] or [b])[0] """
首先我们根据我们的需要(模拟一个三元运算符),我们知道:
整个表达式的结果,应该取决于前面的bool值的真假,而跟a b的真假无关
所以这里要把a和b的真假屏蔽起来,都处理成list,使[a]、[b]永远是真
这样一来再根据上面说的and or 规则就可以模拟一个三元运算符了
但是返回的是[a]或[b],所以最后加上一个数值索引[0],返回的就是a b了
"""

=============================

lambda:生成函数的简便写法,返回值是函数的引用(类似getattr()),值永远是真。

#格式:lambda input : output
def func(a):
return a + 1 print func(1) #用lambda表达式实现
func2 = lambda a : a + 1 print func2(1) #因为lambda返回的是函数的引用,所以你甚至可以这样写:
print (lambda a : a + 1)(1)

devi into python 笔记(三)callable getattr lambda表达式的更多相关文章

  1. C#学习笔记三(委托·lambda表达式和事件,字符串和正则表达式,集合,特殊的集合)

    委托和事件的区别 序号 区别 委托 事件 1 是否可以使用=来赋值 是 否 2 是否可以在类外部进行调用 是 否 3 是否是一个类型 是 否,事件修饰的是一个对象 public delegate vo ...

  2. Python基础三. 函数、lambda、filter、map、reduce

    一.概述 函数, 就是用一些语句组织起来实现一组特定的功能, 用来重复调用. 函数的作用及意义:最大化的重用代码和最小化的代码冗余以及对流程的分解. Python中有哪些函数: 内建的函数 第三方模块 ...

  3. 读书笔记,《Java 8实战》,第三章,Lambda表达式

    第一节,Lambda管中窥豹    可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式,它没有名称,但它有参数列表.函数主题和返回值.    本节介绍了Lambda表达式的语法,它包括 ...

  4. python3 入门 (三) 函数与lambda表达式、闭包

    函数 是组织好的.可重复使用的.用来实现单一或相关联功能的代码段. 函数代码块以def关键词开头,后接函数标识符名称和圆括号() 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数 函 ...

  5. Java8学习笔记(一)--Lambda表达式

    两个概念 函数式接口 函数式接口就是只显式声明一个抽象方法的接口.为保证方法数量不多不少,java8提供了一个专用注解@FunctionalInterface,这样,当接口中声明的抽象方法多于或少于一 ...

  6. Python基础-Python的三元运算符和lambda表达式

    1. Python的三元表达式: 现在大部分高级语言都支持 “?”这个三元运算符,它对应的表达式如下:condition ? value if true:value if else 但是 Python ...

  7. python第l六天,lambda表达式学习,涉及filter及Map。

    在python中lambda表达式可以作为匿名函数来使用,举一个简单的栗子: 以前我们写两个数相加的函数需要 #以前我们写两个数相加的函数,需要这样写 >>> def sum(x,y ...

  8. JAVA 8 主要新特性 ----------------(三)新功能Lambda表达式入门

    一.简述       Java为了扩充匿名方法在1.8中新追加的特性.本身Java之前的版本是没有匿名方法的,只有匿名对象. 二.使用        Java中使用匿名方法必须要对应接口中的一个抽象方 ...

  9. c++学习笔记(七)- lambda表达式 迭代器 算法

    关于lambda表达式: 刷题的时候遇到一句代码不懂: char ch = *it;auto it2 = find_if(it, b.end(), [ch](char x){ return x != ...

随机推荐

  1. LA 3177 Beijing Guards(二分法 贪心)

    Beijing Guards Beijing was once surrounded by four rings of city walls: the Forbidden City Wall, the ...

  2. Codevs 1198 国王游戏 2012年NOIP全国联赛提高组

    1198 国王游戏 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 恰逢 H 国国庆,国王邀 ...

  3. Codevs 2370 小机房的树

    2370 小机房的树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为 ...

  4. 九度OJ 1076 N的阶乘 -- 大数运算

    题目地址:http://ac.jobdu.com/problem.php?pid=1076 题目描述: 输入一个正整数N,输出N的阶乘. 输入: 正整数N(0<=N<=1000) 输出: ...

  5. margin系列之内秀篇(二)

    本系列摘自  飘零雾雨的博客 可挖掘性 之前已经写过一篇关于 margin 应用场景的文章:margin系列之内秀篇,当然,它的应用场景会远大于文中所述,无法一一列举. 所以本篇权当是对此的补遗好了, ...

  6. mysql中char与varchar的区别

    在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下选择塔 ...

  7. php内存申请和销毁

    内存申请 ZendMM使用自身heap层申请内存追踪结果: ZEND_ASSIGN_SPEC_CV_CONST_HANDLER (......) -> ALLOC_ZVAL(......) -& ...

  8. 已经安装php后,再增加扩展模块(不重新编辑php)

    下面以安装curl为例,介绍具体安装步骤. 1.安装crul wget http://curl.haxx.se/download/curl-7.19.6.tar.gz tar -zxvf curl-7 ...

  9. FastCgi与PHP-fpm关系[转] 读完本文瞬间明朗了很多

    刚开始对这个问题我也挺纠结的,看了<HTTP权威指南>后,感觉清晰了不少. 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. ...

  10. C++ static全局变量与全局变量的区别/static全局函数与全局函数的区别

    全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式.这两者在存储方式上并无不同.这两者的区别虽在于非静态全局变量 ...