• Python学习笔记(二)


    1. 函数

    1. 调用函数
      函数API: http://docs.python.org/3/library/functions.html#abs
    2. 数据类型转换
      int(),float(),str(),bool()…
    3. 定义函数
      在Python中,定义函数使用def语句。

      1. def my_abs(x):
      2. if x >= 0:
      3. return x
      4. else:
      5. return -x

      注意在dos命令下,记得缩进。

    4. 空函数
      如果想定义一个什么事也不做的空函数,可以用pass语句。
    1. def nop():
    2. pass

    实际上,pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。

    1. 参数检查
      调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError。
      数据类型检查可以用内置函数isinstance()实现。
    2. 返回多个值
      Python的函数返回值其实就是返回一个tuple。
    3. 函数的参数
      位置参数,默认参数,
      可变参数:定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了*。在参数内部,参数接收的是一个tuple,因此函数的代码完全不变。
      关键字参数:可变参数允许0个或任意个参数,这些可变参数在函数调用时自动组装成一个tuple,而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装成一个dict。
      命名关键字参数:如果要限制关键字参数的名字,就可以用命名关键字参数。
    1. def person(name, age, *, city, job):
    2. print(name, age, city, job)

    参数组合:在Python中定义函数,可以用必选参数,默认参数,可变参数,关键字参数和命名关键字参数,这5种参数都可以组合使用,但是参数的顺序必须是:必选参数,默认参数,可变参数,命名关键字参数和关键字参数。

    1. 递归函数
      在函数内部,可以调用其他函数。如果一个函数在内部调用自身,这个函数就是递归函数。
      使用递归函数要注意防止栈溢出。在计算机中,函数的调用是通过栈这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
      解决递归调用栈溢出的方法是通过尾递归优化,在函数返回的时候,调用自身本身,并且return语句不能包含表达式

    2. 高级特性

    1. 切片
      L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。Python支持L[-1]取倒数第一个元素,同样支持倒数切片。
      L[:10:2]表示,前10个数每2个取一个。L[::2]表示,所有数,每2个取一个。
      tuple也是一种List,唯一区别就是tuple不可变。因此,tuple也可以用切片操作,操作的结果仍然是tuple。
      字符串’xxx’也可以看成List,每一个元素就是一个字符。因此,字符串也可以用切片操作,操作结果仍然是字符串。
    2. 迭代
      如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称之为迭代。
      默认情况下,dict迭代的是key,如果要迭代value,可以用for value in d.values(),如果同时迭代key和value,可以用for k,v in d.items()。
      字符串迭代: for ch in ‘abc’。
      可以通过collections模块的lterable类型来判断一个对象是否是可迭代对象。

      1. >>> from collections import Iterable
      2. >>> isinstance('abc', Iterable) # str是否可迭代
      3. True
      4. >>> isinstance([1,2,3], Iterable) # list是否可迭代
      5. True
      6. >>> isinstance(123, Iterable) # 整数是否可迭代
      7. False

      Python内置的enumerate函数可以把一个list变成索引-元素对。

      1. >>> for i, value in enumerate(['A', 'B', 'C']):
      2. ... print(i, value)
      3. ...
      4. 0 A
      5. 1 B
      6. 2 C
    3. 列表生成式
      列表生成式即ListComprehensions,是Python内置的非常简单却强大的可以用来创建List的生成式。

      1. list(range(1, 11))
      2. [x * x for x in range(1, 11) if x % 2 == 0]
      3. [m + n for m in 'ABC' for n in 'XYZ']

      列出当前目录下所有文件和目录名

      1. >>> import os # 导入os模块,模块的概念后面讲到
      2. >>> [d for d in os.listdir('.')] # os.listdir可以列出文件和目录

      把一个list中所有的字符串变成大写。

      1. >>> L = ['Hello', 'World', 'IBM', 'Apple']
      2. >>> [s.lower() for s in L]
      3. ['hello', 'world', 'ibm', 'apple']
    4. 生成器
      在Python中,这种一边循环一边计算的机制,称为生成器:generator。可以通过next()函数获得generator的下一个返回值。

      1. >>> L = [x * x for x in range(10)]
      2. >>> L
      3. [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
      4. >>> g = (x * x for x in range(10))
      5. >>> g
      6. <generator object <genexpr> at 0x1022ef630>

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

      1. >>> g = (x * x for x in range(10))
      2. >>> for n in g:
      3. ... print(n)
      4. ...

      如果一个函数的定义中包含yield关键字,那么这个函数就不是普通的函数,而是一个generator。

      1. def fib(max):
      2. n, a, b = 0, 0, 1
      3. while n < max:
      4. yield b
      5. a, b = b, a + b
      6. n = n + 1
      7. return 'done'

      generator和函数的执行流程不一样,函数是顺序执行,遇到return语句或者最后一行函数语句就返回,而generator的函数。在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句继续执行。

    5. 迭代器
      直接作用于for循环的数据类型:

      1. 集合数据类型。list,tuple,dict,set,str等;
      2. generator。包括生成器和带yield的generator function。

      这些直接作用于for循环的对象统称之为可迭代对象:Iterable。
      可以使用isinstance()判断一个对象是否是Iterable对象:

      1. >>> from collections import Iterable
      2. >>> isinstance([], Iterable)
      3. True
      4. >>> isinstance({}, Iterable)
      5. True
      6. >>> isinstance('abc', Iterable)
      7. True
      8. >>> isinstance((x for x in range(10)), Iterable)
      9. True
      10. >>> isinstance(100, Iterable)
      11. False

      而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直至最后抛出StopIteration错误表示无法继续返回下一个值了。
      可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
      可以使用isinstance()判断一个对象是否是Iterator对象:

      1. >>> from collections import Iterator
      2. >>> isinstance((x for x in range(10)), Iterator)
      3. True
      4. >>> isinstance([], Iterator)
      5. False
      6. >>> isinstance({}, Iterator)
      7. False
      8. >>> isinstance('abc', Iterator)
      9. False




  • 相关阅读:
    jdk环境变量配置
    Oracle常用操作命令
    Oracle数据库突然宕机,处理方案
    Oracle重启操作步骤
    大家好,我是一名程序员,这就是2017年的我……
    Oracle恢复删除数据
    网络爬虫
    第一篇博客
    函数(二)
    MFC(二)
  • 原文地址:https://www.cnblogs.com/aniudcs/p/a206168aaa19a6df7785ef28d4f9bd3f.html
Copyright © 2020-2023  润新知