美文网首页
python第二周学习函数

python第二周学习函数

作者: ISIS卡拉肖克 | 来源:发表于2017-09-25 02:02 被阅读0次

    python的内置函数有很多
    例如:
    abs函数:这个和php一样
    cmp(x,y)比较函数:如果x<y,返回-1,如果x==y,返回0,如果x>y,返回1;这个函数还是有点不太一样需要特地记一下。
    数据类型转换函数:int整形函数、float浮点型函数、str字符串型函数、unicode编码转换函数、bool布尔型函数;这写函数方法都是根据类型的名字来命名的记起来很好记。
    给函数起别名:

    >>> a = abs # 变量a指向abs函数
    >>> a(-1) # 所以也可以通过a调用abs函数
    

    这个起别名的方法很简单,不过我感觉用处不大。

    定义函数:

    在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

    pass占位符,放一个pass,让代码能运行起来。

    python函数可以返回多个值,原理其实是返回了一个数组,由于语法的原因可以省略括号

    函数的参数

    例如:如何计算x的n次方

    def power(x, n):
        s = 1
        while n > 0:
            n = n - 1
            s = s * x
        return s
    

    上面的方法固定了传参,如果少传就会报错,因此还可以设置默认参数“def power(x, n=2):”
    几点重点记忆:

    必选参数在前,默认参数在后
    如何设置默认参数
    多个传参时变化大的在前面变化小的在后面

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

    *args是可变参数,args接收的是一个tuple;
    **kw是关键字参数,kw接收的是一个dict。

    递归函数

    这块当然逻辑都是一样的,函数在内部可以调用自身那么他就是递归函数
    还有文档上的例子(if else 的写法看上去还是很简单特别的):

    def fact(n):
        if n==1:
            return 1
        return n * fact(n - 1)
    
    切片

    切片概念:
    数组名[0:3],0:3是数组中的索引,指获取数组0到3的元素,
    还可以使用负数,
    数组名[-10:]后10个数,
    数组名[::5]数组中每5个元素取一个,
    数组名[:10:2]前10个数,每两个取一个,
    数组名[10:20]前11-20个数,
    什么都不写,只写[:]就可以原样复制一个数组:

    重点:字符串也可使用切片操作
    例如:'ABCDEFG'[:3]

    迭代:

    在Python中,迭代是通过for ... in来完成的

    默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.itervalues(),如果要同时迭代key和value,可以用for k, v in d.iteritems()。

    列表生成式

    列表生成式的代码格式,感觉还是比较不好使用的

    range(1, 11),可以生成1到11的数组
    [x * x for x in range(1, 11)],当然还可以加上一些计算
    [x * x for x in range(1, 11) if x % 2 == 0],for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方

    for循环其实可以同时使用两个甚至多个变量,比如数组后面跟iteritems()可以同时迭代key和value

    lower(),将list中所有的字符串变小写

    生成器

    在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。
    要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

        L = [x * x for x in range(10)]
        L
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
        g = (x * x for x in range(10))
        g
    

    创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。

    高阶函数

    变量可以指向函数,这个还是很特别的

    f = abs
    a = f(-10)
    10
    
    传入函数

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

    def add(x, y, f):
        return f(x) + f(y)
    

    当我们调用add(-5, 6, abs)时,参数x,y和f分别接收-5,6和abs,根据函数定义,我们可以推导计算过程为:

    x ==> -5
    y ==> 6
    f ==> abs
    f(x) + f(y) ==> abs(-5) + abs(6) ==> 11
    
    map()

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

    图片.png
    def f(x):
        return x * x
    a = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
    print a
    [1, 4, 9, 16, 25, 36, 49, 64, 81]
    
    filter

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

    如何勇filter()删除1~100的素数呢?

    import math
    def is_prime(n):
        list_num = []
        for i in range(2, n):
            for num in range(2, int(math.sqrt(n))+1):
                if i % num == 0 and i != num:
                    break
                elif i % num != 0 and num == (int(math.sqrt(n))):
                    list_num.append(i)
        return list_num
        
    print is_prime(100)
    

    总结:本周主要围绕着python的函数部分在看,整理一些比较有代表性的例子,同时明显感受代码风格和逻辑能接受,但是无法段时间熟练掌握,代码风格差异和php比起来蛮大的,有很多细节运行demo的时候需要花时间理解,这周进度很慢问题是有些地方不好理解,下周加快进度,再写一些稍难一点的demo,来加深这部分语法风格的掌握。

    相关文章

      网友评论

          本文标题:python第二周学习函数

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