alibabamama 发表于 2017-4-27 07:09:02

Python笔记——函数及模块

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



Python笔记——函数及模块

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

一般形式:
def <函数名> (参数列表):
<函数语句>
return <返回值>

其中参数和返回值非必须
注意,没有返回值的return语句等价于return None。None是Python中表示没有任何东西的特殊类型。

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

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

#使用外部定义变量def use_global():global xprint("old x = "+str(x))x = 0print("change to x = "+str(x))x=20use_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+cprint(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 resultl=j=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#调用lambdatwice = repeater(2)#拿到函数,其中n=2,参数为sprint(twice('word'))print(twice(2))#再一个例子fun =lambda x:x*x-1print(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,可选,要列举的模块名
若是不向其传递,返回当前脚本所有名字列表

注意:使用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 = 0for i in L:def show():print('abcd')if __name__ == '__main__':show()print('main print')result += ireturn result#使用外部定义变量def use_global():global xprint("old x = "+str(x))x = 0print("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*nhello()l=print(sum(l))x=20use_global()print(use_default()) #不传,使用默认print(use_default(4,5,6) ) #顺序赋值print(use_default(b=4,c=5,a=6) )#乱序,但是指定j=print(listappend(l,j))#调用lambdatwice = repeater(2)#拿到函数,其中n=2,参数为sprint(twice('word'))print(twice(2))#再一个例子fun =lambda x:x*x-1print(fun(2))print(dir())

页: [1]
查看完整版本: Python笔记——函数及模块