Python

作者: 安于然 | 来源:发表于2015-12-05 15:58 被阅读739次

    > Python 判断文件或路径是否存在

    http://www.jb51.net/article/66452.htm

    > Anaconda 安装软件

    conda install ***

    > 以下内容转载自:廖雪峰老师博客

    字符串里面的%是一个普通字符, 转义用%%来表示.

    if判断条件还可以简写,比如写:

    if x:

        print 'True'

    只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False。

    判断键是否在字典中,in or get method.

    return None可以简写为return

    实际上,Python的函数返回多值其实就是返回一个tuple

    当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
    在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数

    def func(a, b, c=0, *args, **kw):

        print'a =', a,'b =', b,'c =', c,'args =', args,'kw =', kw

    >>>func(1,2)

    a =1 b =2 c =0 args = () kw = {}

    >>>func(1,2, c=3)

    a =1 b =2 c =3 args = () kw = {}

    >>>func(1,2,3,'a','b')

    a =1 b =2 c =3 args = ('a','b') kw = {}

    >>>func(1,2,3,'a','b', x=99)

    a =1 b =2 c =3 args = ('a','b') kw = {'x':99}

    要注意定义可变参数和关键字参数的语法:

    *args是可变参数,args接收的是一个tuple;

    **kw是关键字参数,kw接收的是一个dict。

    以及调用函数时如何传入可变参数和关键字参数的语法:

    可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3));

    关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})。

    >>>from collections import Iterable

    >>>isinstance('abc', Iterable)# str是否可迭代

    True

    >>>isinstance([1,2,3], Iterable)# list是否可迭代

    True

    >>>isinstance(123, Iterable)# 整数是否可迭代

    False

    List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

    >>>[x * x for x in range(1,11) if x %2==0]

    [4,16,36,64,100]

    >>>[m + n for m in 'ABC' for n in 'XYZ']

    ['AX','AY','AZ','BX','BY','BZ','CX','CY','CZ']

    generator

    >函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!
    Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。

    1> 函数本身也可以赋值给变量,即:变量可以指向函数。

    2> 函数名其实就是指向函数的变量!

    既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数.

    把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。

    >map函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

    >reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

    reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

    str转换为 int.

    def char2num(s):

        return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]

    def str2int(s):

        return reduce(lambda x,y: x*10+y, map(char2num, s))

    练习

    利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']。

    map(lambda w:w.title(),L)

    Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list并利用reduce()求积。

    reduce(lambda x,y:x*y,L)

    >和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

    >sorted()函数也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。

    >关键字lambda表示匿名函数,冒号前面的x表示函数参数。

    匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

    >在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。

    本质上,decorator就是一个返回函数的高阶函数。

    >简单总结functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。

    > 模块

    类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等;外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。

    默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中

    Python提供了__future__模块,把下一个新版本的特性导入到当前版本,于是我们就可以在当前版本中测试一些新版本的特性。

    > 类

    如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问,所以,我们把Student类改一改:

    class Student(object):

        def __init__(self, name, score):

            self.__name = name        

            self.__score = score

        def print_score(self):

            print'%s: %s'% (self.__name, self.__score)

        def get_name(self):

            return self.__name

        def get_score(self):

            return self.__score

        def set_score(self, score):

            if 0<= score <=100:           

                self.__score = score

            else:

                raise ValueError('bad score')

    有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

    双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量.

    >>>bart._Student__name

    'Bart Simpson'

    判断基本数据类型可以直接写int,str等,但如果要判断一个对象是否是函数怎么办?可以使用types模块中定义的常量:

    >>>import  types

    >>>def fn():

    ...    pass

    >>>type(fn)==types.FunctionType

    True

    >>>type(abs)==types.BuiltinFunctionType

    True

    >>>type(lambdax:x)==types.LambdaType

    True

    >>>type((x for x in range(10)))==types.GeneratorType

    True

    ......

    相关文章

      网友评论

          本文标题:Python

          本文链接:https://www.haomeiwen.com/subject/dhnshttx.html