Python 学习之路(二),,Python 学习之


Python 学习之路(二)

以下所用的是Python 3.6

一、条件语句

简单判断

1 if 判断条件:2     执行语句……3 else:4     执行语句……

复杂判断

1 if 判断条件1:2     执行语句1……3 elif 判断条件2:4     执行语句2……5 elif 判断条件3:6     执行语句3……7 else:8     执行语句4……

二、循环语句

2.1 while语句

和其他语言一样,不同的是多了else语句。在 python 中,while … else 在循环条件为 false 时执行 else 语句块。

例子:

1 count = 02 while count < 5:3    print count, " is  less than 5"4    count = count + 15 else:6    print count, " is not less than 5"

2.2 for语句

1 for iterating_var in sequence:2    statements(s)

else语句: 在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。

1 for i in range(2,num): # 根据因子迭代2       if num%i == 0:      # 确定第一个因子3          j=num/i          # 计算第二个因子4          print ‘%d 等于 %d * %d‘ % (num,i,j)5          break            # 跳出当前循环6    else:                  # 循环的 else 部分7       print num, ‘是一个质数‘

2.3 break,continue语句

用在while,for语句中

2.4 pass语句

充当一个占位语句。

2.5 range函数

1 range(n) # 表示从0到n-12 range(a,b) #表示从a到b-13 range(a,b,step) #表示从a到b-1,步长为step

例:

1 for i in range(5,9):2     print(i)

三、函数

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。函数内容以冒号起始,并且缩进。return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

3.1 函数举例

1 # 定义函数2 def printStr( str ):3    "打印任何传入的字符串"4    print (str);5    return;6 7 printStr("name") # 函数调用

3.2 函数中参数的传递

在 python 中,类型属于对象,变量是没有类型的。strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象,可以理解为引用。

3.3 参数的几种方式

必需参数:必需参数须以正确的顺序传入函数,调用时的数量必须和声明时的一样。关键字参数:关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
1 #可写函数说明2 def printStr( str ):3    "打印任何传入的字符串"4    print (str);5    return;6  7 #调用printStr函数8 printme( str = "name");
默认参数:调用函数时,如果没有传递参数,则会使用默认参数。
1 def printStr( str="moren" ):2    "打印任何传入的字符串"3    print (str);4    return;
不定长参数:函数能处理比当初声明时更多的参数。
1 def functionname([formal_args,] *var_args_tuple ):2    "函数_文档字符串"3    function_suite4    return [expression]

* 后的变量名会存放所有未命名的变量参数,是一个元组,没有参数时,为一个空元组。

3.4 return语句

例:

1 def sum( arg1, arg2 ):2    # 返回2个参数的和."3    total = arg1 + arg24    return total;

3.5 Lambda表达式

lambda 只是一个表达式,函数体比 def 简单很多。lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。格式:lambda [arg1 [,arg2,.....argn]]:expression
1 sum = lambda arg1, arg2: arg1 + arg2;

3.6 变量作用域

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域。Python的作用域一共有4种,分别是:

L (Local) 局部作用域E (Enclosing) 闭包函数外的函数中G (Global) 全局作用域B (Built-in) 内建作用域当内部作用域想修改外部作用域的变量使用:global(修改外部变量) 和 nonlocal(修改嵌套作用域)关键字

例1:

1 num = 12 def fun():3     global num  # 需要使用 global 关键字声明4     print(num) 5     num = 1236     print(num)

例2:

1 def outer():2     num = 103     def inner():4         nonlocal num   # nonlocal关键字声明5         num = 1006         print(num)7     inner()8     print(num)9 outer()

四、迭代器和生成器

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法:iter() 和 next()。

4.1 迭代器

1 list=[1,2,3,4]2 it = iter(list)    # 创建迭代器对象3 for x in it:4     print (x, end=" ")

4.2 生成器

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

 1 import sys 2   3 def fibonacci(n): # 生成器函数 - 斐波那契 4     a, b, counter = 0, 1, 0 5     while True: 6         if (counter > n):  7             return 8         yield a 9         a, b = b, a + b10         counter += 111 f = fibonacci(10) # f 是一个迭代器,由生成器返回生成12  13 while True:14     try:15         print (next(f), end=" ")16     except StopIteration:17         sys.exit()

五、模块

模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。可以理解为库,通C/C++ 的include。

5.1 import语句

一个模块只会被导入一次。导入模块会从默认路径中选择,从当前工作目录,也可以通过sys中的sys.path来输出目录路径,来寻找这个包中包含的子目录。

1 import module1[, module2[,... moduleN]

例:

1 import sys

5.2 from…import 语句

Python的from语句让你从模块中导入一个指定的部分到当前命名空间中,语法如下:

1 from modname import name1[, name2[, ... nameN]]2 from modname import * #导入全部模块

这将把所有的名字都导入进来,但是那些由单一下划线(_)开头的名字不在此例。大多数情况, Python程序员不使用这种方法,因为引入的其它来源的命名,很可能覆盖了已有的定义。

5.3 __name__属性

如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。

#!/usr/bin/python3# Filename: using_name.pyif __name__ == ‘__main__‘:   print(‘程序自身在运行‘)#在该模块内运行,才会执行else:   print(‘我来自另一模块‘)#在外部模块导入本模块,才会执行

5.4 包

目录只有包含一个叫做__init__.py的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫做 string)不小心的影响搜索路径中的有效模块。 最简单的情况,放一个空的__init__.py就可以了。当然这个文件中也可以包含一些初始化代码或者为 __all__变量赋值。 例:

1 #第一种形式2 import 根目录.二级目录.三级目录...# 根目录是存放着__init__.py的文件夹,也就是包3 4 #第二种形式5 from 根目录.二级目录.三级目录... import 对应函数 #导入对应模块中的函数6 from packagename import * #导入该目录下的所有模块,但一般不采用这种做法

all__可以在import * 的时候只导入指定的.py模块。案例如下,定义在__init.py文件中

1 __all__ = ["模块1","模块2"...]

Python 学习之路(二)

评论关闭