Python3 学习第十二弹: 补充something

python中遇到 *keys, **keys的形式

其实 
    * 代表传递任意个无名字参数,这些参数通过Tuple访问
    >>> def sum(*keys):
        ret= 0
        for i in keys:
            ret += i
        return ret
    >>> sum(1,2,3,4,5)
    15

    ** 代表传递人一个有名字参数,这些参数通过dict访问
    >>> def sum(**keys):
        ret= 0
        for i,j in keys.items():
            ret += j
        return ret
    >>> sum(a=1,b=2)
    3

一些特殊函数

pass 程序什么都不用做
    用的地方不多,比如
    if age < 10:
        print('children')
    elif age < 20:
        pass
    elif age < 30:
        print('adult')

del python一般会删除那些不用的对象
    比如列表与字典中删除时
    此外,del会删除该值的引用
    >>> a = 1
    >>> b = a
    >>> del a
    >>> b
    1
    >>> a
    NameError: name 'a' is not defined
    要注意的是,a虽然会被删除,但是引用b不会被删除,也就是其值实际上没有删除,只是删除了引用a。python实际上是无法删除值的,不过当某个值不再被引用时,python会自动负责内存的回收的。

exec 将字符串当作python语句进行运行
    使用必须慎之又慎
    >>> exec("print('Mathics')")
    Mathics
    exec与import比较相当于直接将代码复制到exec这个地方,可能会覆盖原来的变量,而import一般都会有自己的命名空间,exec具有潜在的破坏性。
    通常的解决方法是将exec中的代码放在字典中,字典相当于起到名字空间作用
    >>> from math import sqrt
    >>> scope = {}
    >>> exec('sqrt = 1', scope) #将语句在scope域中执行
    >>> sqrt(4)
    2.0
    >>> scope['sqrt']
    1

eval 将字符串作为表达式计算并且返回值
    >>>eval(input())
    1+2*3
    7
    >>>eval(input())
    if 1 < 2 : print('Yes')
    SyntaxError: invalid syntax

    eval不能运行语句
    相同的,eval也可以通过上述方法在命名空间中执行

type 返回对象的类型
    更深入的,type可以创建一个新的类型,相当于创建一个class
    type(类名, 父类的元组(针对继承的情况,可以为空),包含属性的字典(名称和值))
    返回该类

    >>> World = type('World', (), {'Land': 'Asia'}) # 直接当类使用
    >>> a = World()
    >>> a.Land
    'Asia'
    >>> World.Land
    'Asia'

    # 添加函数
    >>> def WhereIam(self):
            print(self.Land)
    >>> World = type('World', (), {'Land': 'Asia', 'WhereIam': WhereIam})
    >>> World.WhereIam()
    TypeError: WhereIam() missing 1 required positional argument: 'self'
    >>> a = World()
    >>> a.WhereIam()
    Asia


isinstance(object, class or type or tuple) 判断object是否为对应类型
    >>> isinstance(12,int)
    True
    >>> isinstance([1,2], list)
    True
    >>> isinstance((1,2), tuple)
    True
    >>> a = Person()
    >>> isinstance(a, Person)
    True

python在函数式编程方面有一些有用的函数

map(func, *iterable)
    >>> map(str, range(5))  # Equivalent to [str(i) for i in range(5)]
    ['0','1','2','3','4']

filter(func, iterable) #过滤掉iterable中不符合func的值,返回剩下值得列表
    >>> def isnum(x):
            return type(x) == int
    >>> seq = ['abc', 12, 'z']
    >>> list(filter(isnum, seq))
    [12]

 

posted @ 2014-10-20 21:57  Estimator  阅读(374)  评论(0编辑  收藏  举报