python改变自定义模块的位置 python 定义模块_vb.net 调用 模块参数

python的程序由包(package)、模块(module)和函数组成。模块是处理某一类问题的集合,模块由函数和类组成。包是由一系列模块组成的集合。下图描述了包、模块、类和函数之间的关系。

python改变自定义模块的位置 python 定义模块_vb.net 调用 模块参数_02

包就是一个完成特定任务的工具箱,Python提供了许多有用的工具包,如字符串处理、图形用户接口等,使用这些自带的工具包,可以提高程序员的开发效率,减少编程的复杂度,达到代码复用的效果。

这些自带的工具包和模块安装在Python的安装目录下的lib目录中。如下图所示:

python改变自定义模块的位置 python 定义模块_vb.net 调用 模块参数_03

除了自带的工具包和模块,还有第三方工具包和模块都存放在了site-packages的目录中。

一、模块

模块是Python中重要的概念,Python程序是由一个个模块组成的,一个python文件就是一个python模块。

1.1 模块的创建

模块把一组组相关的函数或代码组织到一个文件中,一个文件就是一个模块。模块由代码、函数或类组成。创建一个名为myModule.py的文件,即定义了一个名为myModule的模块。在myModule模块中定义一个函数func()和一个类MyClass。MyClass类中定义一个方法myFunc()。

# 自定义模块def func()    print("MyModule.func()")class MyClass:    def myFunc(self):        print("MyNodule.MyClass.myFunc()")

然后在myModule.py所在目录下创建一个call_myModule.py的文件。在该文件中调用myModule模块的类和函数。

# 调用自定义模块的类和函数import myModule    # 导入modulemyModule.func()myClass = myModule.MyClass()myClass.myFunc()

1.2 模块的导入

在使用有个模块的函数或类之前,首先要导入该模块。模块的导入使用import语句,模块的导入语句的格式如下所示:

import module_name

这条语句可以直接导入一个模块。调用模块的函数或者类时,需要以模块名作为前缀,其格式如下所示:

module_name.func()

如果不想在程序中使用前缀,可以使用from...import...语句导入。from...import...语句的格式如下所示:

from module_name import func_name  # 仅导入模块func_name  from module_name import *          # 导入该模块下所有的函数

1.3 模块的属性

模块有一些内置属性,用于完成特定的任务,如__name__、__doc__。每一个模块都有一个名称,例如__name__用于判断当前模块是否是程序的入口,如果当前程序正在被使用,__name__的值为“__main__”,通常每个模块都添加一个条件语句,用于单独测试该模块的功能。

例如创建一个模块myModule

if __name__ == '__mian__':    print('myModule作为主程序运行')else:    print('myModule被另一个模块调用')

单独运行模块myModule时,输出结果如下:

myModule作为主程序运行

创建另外一个模块call_myModule。这个模块导入myModule

import myModuleprint(__doc__)

运行call_myModule时,输出结果:

myModule被另一个模块调用

1.4 模块的内置函数

filter()        

对某个序列做过滤处理,判断自定义函数的参数返回结果是否为真,并一次性返回处理结果。

演示代码如下:

def func(x):    if x > 0:        return xlst = filter(func, range(-9, 10))print(lst)打印结果是一个可迭代对象:0x7f4bd3afa128>print(list(lst))打印结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]

reduce()

对序列中的元素做连续操作,演示代码如下:

def sum(x, y):    return x + yfrom functools import reduceprint(reduce(sum, range(0,10)))执行累加计算0+1+2+3+4+5+6+7+8+9返回打印结果:45print(reduce(sum, range(0,10), 10))执行累加计算10+0+1+2+3+4+5+6+7+8+9返回打印结果:55

abs()

abs(x)返回x的绝对值

bool()

bool(x)返回x的布尔值,true或者false

int()

int(x)将字符串类型的数据或者数字转换成整形

float()

float(x)将字符串类型的数据或者数字转换成浮点型

hash()

hash(x)返回一个对象的hash值

input()

接收控制台的输入,并把输入的值转换为数字

eval()

将字符串转成表达式并执行,该方法虽然好用,但是不安全,因为可以利用该函数执行系统命令,删除文件等操作。

help()

帮助说明

len()

返回对象包含的元素个数

range()

返回一个列表

round()

四舍五入函数

set()

返回一个set集合

sum()

返回一个序列的和

type()

返回一个对象的类型

zip()

把n个序列作为列表的元素返回

二、函数

函数的定义非常简单,使用关键字def定义。函数在使用前必须定义,函数的类型即返回值的类型。python函数定义格式如下所示:

def 函数名(参数1,参数2...):    ...    return 表达式

函数名可以是字母、数字或者下划线组成的字符串,但是不能以数字开头。函数的参数放在一对圆括号中,参数的个数可以有一个或者多个,参数之间以逗号分隔,这种参数称为形式参数,括号后面以冒号结束,冒号下面就是函数的主体。

递归函数

递归函数可以在函数主体内直接或者间接的调用自己,即函数的嵌套是函数本身。递归是一种程序设计方法,使用递归可以减少重复的代码,使程序变的简洁。

下面这段代码用递归实现了阶乘的计算过程。

# 计算阶乘def refunc(n):    if n==0 or n==1:        return 1    else:        return n*refunc(n-1)print(refunc(5))打印返回结果:1*2*3*4*5=120

lambda函数

lambda函数用于创建一个匿名函数,函数名未和标识符进行绑定。使用lambda函数可以返回一些简单的运算结果,lambda函数的格式如下所示:

lambda 变量1 变量2 ... :表达式

其中变量列表用于表达式的计算,lambda属于函数,因此变量列表后需要一个冒号。通常把lambda赋值给一个变量,变量就可以当做函数使用,例如:

func = lambda x : x*xprint(func(10))返回打印结果: 100######################func = lambda x, y : x + yprint(func(10, 20))返回打印结果: 30

习题:如何用一行代码实现将列表lst = [2.3, 4.5, 1.6, 7.9, 1.0, 2.7]根据小数点后面的一位数从小到大排序?

思考一分钟,答案见下文:


print(sorted(lst, key=lambda x: str(x).split(".")[-1]))