#Python#编程大神原来是这么来的,一篇文章带你走入大神的世界( 五 )


如上述代码 , 将10赋值给i之后 , i的作用范围就是后面的全部代码 , 一直到程序结束为止 , 那么这些被覆盖到的范围就是变量i的作用域 。 而在下面的代码中 , 当i在函数里面被定义 , 并且没有用global关键字声明 , 正常情况下其作用范围仅限于该函数 。

def func():    i=10    print(i)func()

上述代码中 , i的作用范围仅限于func()函数中 。 而如果变量在函数外部定义 , 那么在函数内部可以使用该变量 , 但是却无法直接修改该变量的值 。 如果对其进行修改就会造成命名空间冲突 , 出现错误 。 解决上述问题的答案其实很简单 , 就是将变量用global关键字声明为全局变量即可 。

i=10def func():    global i    print(i)func()

上述代码中的i就是全局变量 , 当将变量声明为全局变量之后就不会受局部变量的影响了 。
函数定义的格式:函数定义的格式就是如何将一串代码封装为成函数的方式 。 函数是通过def关键字定义的 , 函数定义格式如下:

def 函数名(参数):    函数体

下面的代码建立了函数abc() , 函数的参数可以没有 , 但需要注意即使没有参数也需要加括号 。 示例代码中相当于将两个print语句进行了封装 。 如果想要将上述两个print语句统一进行一次执行时只需要调用abc()函数即可 。 在调用函数时只需要使用“函数名(参数)” 。

def abc():    print(\"abcde\")    print(\"456\")abc()

函数参数:如果函数没有参数 , 那么这个函数就是固定的 , 因为该函数内部的代码是固定的 , 所以无论怎样执行都是同样的结果 。 而如何使得函数能够实现具体问题具体分析呢?此时可以为其传入相应的参数 , 这样函数就可以根据所传入的参数进行相应的数据处理 。 参数就相当于函数与外界沟通的接口 。 参数分为形参和实参 , 一般而言在函数定义的时候使用参数就是形参 , 所谓形参就是“形式上的参数”;在函数调用的时候使用的就是实参 , 而所谓的实参就是“实际的参数” 。 如下的代码段中实现了两个数据比较大小的功能:
def func2(ab):    if(a>b):        print(str(a)+\"比\"+str(b)+\"大\")    else:        print(str(b)+\"比\"+str(a)+\"大或者\"+str(b)+\"与\"+str(a)+\"相等\")

上述代码中封装了一个名为func2的函数 , 里面传递两个参数 , 参数的名字可以自行定义 , 函数里面则可以根据具体的形参进行判断 。 上述代码中如果a>b , 输出“a比b大” , 否则就输出“b比a大或者b与a相等” 。 对于上述函数 , 每次调用时可以传递不同的参数进去 , 进而根据具体情况具体分析 , 并得到相应的结果 。 综上所述 , 函数就是将一串代码进行封装 , 即函数一般用于功能的封装 。
模块:模块就相当于函数的再次封装 。 Python中有一些常用的模块 , 这些常用的模块存在于Python的安装目录之下 , 其中有一个名为“lib”的目录 , 该目录一般就用于放置模块 , 而且大家也可以自己写模块 , 这样的模块就叫做自定义模块 。
在Python中想要使用模块需要掌握两个知识点:导入和使用 。 一般而言有几种方法导入模块 , 第一种方法就是使用import语句直接导入某个模块 , 第二种方法就是从某个模块中仅导入某个方法 。 如下代码所示 , 可以从time模块中导入sleep方法 , 也可以使用from time import *将time模块的所有方法都导入进来 。

import randomfrom time import sleepfrom time import *a=[\"中奖\"\"不中奖\"\"不中奖\"
print(random.choice(a))

random模块主要用于随机数的处理 。 上述代码使用random实现了一个抽奖功能 , 首先导入了random , 然后建立一个列表 , 里面有“中奖”和“不中奖”选项 , random.choice(a)将会随机在列表a中选择一个选项并输出对应的结果 。 time模块也有一些比较常用的功能 , 比如time.sleep() , 其实现了延时功能 。 如果想要修改模块的源代码 , 只需要在lib目录下找到相应的模块进行修改即可 。