Python笔记——函数及模块

转载请注明出处:http://blog.****.net/wklken/archive/2011/04/10/6312862.aspx


Python笔记——函数及模块

一、函数

函数是可重用的程序段

使用def可以声明一个函数,完整的函数由函数名,参数以及函数实现语句组成。

一般形式:

def <函数名> (参数列表):

<函数语句>

return <返回值>

其中参数和返回值非必须

注意,没有返回值的return语句等价于return NoneNonePython中表示没有任何东西的特殊类型。

eg1.

#函数基本定义 def hello(): print("hello world!python") #带参数的函数 def sum(L): result = 0 for i in L: result += i return result

调用 hello()

调用 sum(l)

函数块中声明变量默认为局部变量

若是想在函数中使用外部声明的变量,使用global关键字

#使用外部定义变量 def use_global(): global x print("old x = "+str(x)) x = 0 print("change to x = "+str(x)) x=20 use_global()

Ø 函数中的参数:

在声明函数时,可以预先为参数设置一个默认值,在调用时,若不向函数传递参数,使用默认值

形式:

def <函数名> (参数 = 默认值):

<语句>

Eg.mehthodDemo.py

def sum(a=1,b=2,c=3):

return a+b+c

注意,参数传递的方式:

1.顺序传递,如sum(12,3,4)【当提供参数少于函数需要,使用顺序传递,未赋予将查找默认值,无默认报错】

2.参数名传递,sum(c=3,b=1,a=2)

注意: 只有在形参表末尾的那些参数可以有默认参数值,即你不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的形参。

#使用默认参数 见后面的调用方式 def use_default(a=1,b=2,c=3): return a+b+c print(use_default()) #不传,使用默认 print(use_default(4,5,6) ) #顺序赋值 print(use_default(b=4,c=5,a=6) )#乱序,但是指定

Ø 可变长的参数:

具有任意个参数,而不必将所有参数定义

参数开头以*

#使用可变长参数 def listappend( *l ): result = [] for i in l: result.extend(i) return result l=[1,2,3,4,5] j=[4,5,6] print(listappend(l,j))

Ø 补充:lambda表达式

特殊的声明函数方式,用于创建新的函数对象,并且在运行时返回它们【返回函数对象】

声明一个匿名函数,简单的函数,返回一个值

用于定义小型的函数,在函数中仅包含单一的参数表达式,而不能包含其他语句,但是可以调用其他函数

格式:

lambda 参数列表:表达式

result = lambda x:x**2

result = lambda x:show(x)*2

#lambda表达式 def repeater(n): return lambda s:s*n #调用lambda twice = repeater(2)#拿到函数,其中n=2,参数为s print(twice('word')) print(twice(2)) #再一个例子 fun =lambda x:x*x-1 print(fun(2))

二、模块

模块是包含函数和其他语句的python脚本文件,以“.py”为后缀名

模块是包含了自定义函数和变量的文件

python中可以通过导入模块,然后使用模块中的函数或者数据

1、导入模块

格式:

import 模块名

import 模块名 as 别名

from 模块名 import 函数名

使用import导入,调用时,必须 模块名.函数名 调用

使用from导入,调用时,直接 函数名

编写自己的模块:

my.py

其中函数

def show()

print('this is a module!')

value = 'module'

保存

命令号进入该文件夹下[与编写的模块在同一目录下]

import my

my.show()

print my.value

2、设置模块查找路径

上一例子是在同一目录

若不在同一目录,python查找不到,必须进行查找路径的设置,将模块所在的文件夹加入系统查找路径

查看默认查找路径:

import sys

sys.path

添加一个路径[将当前路径加入]

import os

import sys

sys.path.append(os.getcwd())

3__name__属性

每个python脚本在运行时都有一个 __name__属性【前后均为两下划线】

如果脚本独立运行,__name__属性为"__main__"

如果脚本作为模块被导入,则其__name__属性被设为模块名

def show(): print('abcd') if __name__ == '__main__': show() print('main print')

dir函数——列出模块定义的标识符,标识符包含函数,类和变量

dir() 默认列出当前模块的属性列表

dir(模块名) 获取导入模块中所有定义的名字,函数等,使用内置函数dir()获取列表

dir([object])

object,可选,要列举的模块名

若是不向其传递,返回当前脚本所有名字列表

注意:使用del可以将一个变量/名称从列表中删除

4、模块包

python中可以用包来管理多个模块

使用python中的模块包可以通过路径导入模块

优点:避免名字冲突,便于包的管理

包可以看作是处于同一目录中的模块,在包的每一个目录中都必须包含一个“__init__.py

该文件可以为空,仅用于表示该目录为一个包

该文件主要用途是设置"__all__"变量以及包含包初始化所需要的代码

格式:

from A.B import a

import A.B.a

最后附上以上程序及运行结果:

# methodDemo.py 函数及模块示例 #函数基本定义 def hello(): print("hello world!python") #带参数的函数 def sum(L): result = 0 for i in L: def show(): print('abcd') if __name__ == '__main__': show() print('main print') result += i return result #使用外部定义变量 def use_global(): global x print("old x = "+str(x)) x = 0 print("change to x = "+str(x)) #使用默认参数 见后面的调用方式 def use_default(a=1,b=2,c=3): return a+b+c #使用可变长参数 def listappend( *l ): result = [] for i in l: result.extend(i) return result #lambda表达式 def repeater(n): return lambda s:s*n hello() l=[1,2,3,4,5] print(sum(l)) x=20 use_global() print(use_default()) #不传,使用默认 print(use_default(4,5,6) ) #顺序赋值 print(use_default(b=4,c=5,a=6) )#乱序,但是指定 j=[4,5,6] print(listappend(l,j)) #调用lambda twice = repeater(2)#拿到函数,其中n=2,参数为s print(twice('word')) print(twice(2)) #再一个例子 fun =lambda x:x*x-1 print(fun(2)) print(dir())

Python笔记——函数及模块