python函数模块

学习完本篇,你将会深入掌握

  • 函数相关知识
    1.函数定义
    2.函数如何调用
    3.递归函数以及匿名函数使用
  • 模块相关知识
    1.模块如何导入调用
    2.函数调用顺序

函数定义

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

函数语法

  • Python函数语法跟java以及C类似
语法:
def functionname( parameters ): 
    "函数_文档字符串" 
    function_suite 
    return [expression]
实例:
def printme( str ):
    "打印传入的字符串到标准显示设备上
    “ print str”
    return

参数传递

  • 定义一个函数,给出函数包含的参数以及代码块结构。函数的基本结构给出后,就可以直接调用
#!/usr/bin/python 
#-*- coding: UTF-8 -*- 
#定义一个函数
def add(num1,num2):
    return num1+num2

If __name__ == “__main__”
    var_1 = 50
    var_2 = 60
    print add(50,60)
  • Python中类型属于对象,变量没有类型

不可变类型

类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

可变类型

类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

参数类型

  • Python函数参数有四个参数类型,分别为
    1、必备参数
    2、关键字参数
    3、默认参数
    4、不定长参数
  • 必备参数:必备参数须以正确的顺序传入函数,调用时的数量必须和声明时的一样。
#!/usr/bin/python 
#-*- coding: UTF-8 -*- 
#可写的函数说明
def printstr(str):
   ‘’’打印任何参数’’’
   print str
   return 

If __name__ == “__main__”
   printstr(“hello”)
  • 关键字参数:关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值,同时参数传入的顺序可以不一致。
#-*- coding: UTF-8 -*- 
#可写的函数说明
def printinfo(name ,age):
    print “name:%s\n age:%d” %(name,age)
    return 

If __name__ == “__main__”:
    printinfo (age = 50,name = ‘zhangmou’)
  • 缺省参数:调用函数时,缺省参数的值如果没有传入,则被认为是默认值。
#-*- coding: UTF-8 -*- 
#可写的函数说明
def printinfo(name  ,age = 10):
    print “name:%s\n age:%d” %(name,age)
    return 

If __name__ == “__main__”
    printinfo (age = 50,name = ‘zhangmou’)
    printinfo (name= ‘limou’)
    printinfo(‘limou’)
  • 不定长参数:一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数
#!/usr/bin/python 
# -*- coding: UTF-8 -*- 
# 可写函数说明 
def printinfo( arg1, *vartuple ):
    print "输出: " 
    print arg1 for var in vartuple: 
    print var return;
 
If __name__ == “__main__”
    printinfo( 10 ); 
    printinfo( 70, 60, 50 );

匿名函数

  • Python用lambda创建匿名函数
  • Lambda的是一个表达式,而不是一个代码块,lambda有自己的命名空间
# -*- coding: UTF-8 -*- 
# 可写函数说明 
sum = lambda arg1, arg2: arg1 + arg2; 
If __name__ == “__main__”
    # 调用sum函数 print "相加后的值为 : ", 
    sum( 10, 20 ) 
    print "相加后的值为 : ", sum( 20, 20 )

Return语句

  • Return语句[表达式]退出函数,不带参数的return语句返回None。
# -*- coding: UTF-8 -*- 
def sum(arg1,arg2)
      reurn arg1+arg2
If __name__ == “__main__”
# 调用sum函数 print "相加后的值为 : ", 
    Total = sum(1,2)
    print "相加后的值为 : ", Total

变量作用域

  • 一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。
  • 变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:
    1.全局变量
    2.局部变量
  • 定义在函数内部的变量称为局部变量
  • 定义在函数外部的变量称为全部变量
# -*- coding: UTF-8 -*- 
total = 0;#这是一个全局变量
Def sum(arg1,arg2):
    total =  arg1 + arg2;#这是一个局部变量
    print  “局部变量total:%d” %total
    return toal

If __name__ == “__main__”
# 调用sum函数 print "相加后的值为 : ", 
    Sum(1,30)
    print “全部变量total: ", total

Python模块

  • Python模块是一个python文件,以py结尾的。模块能让你更有逻辑的组织你的python代码段。
Calc.py模块:

def   sum(arg1,arg2)
        return  arg1+arg2

def  min(arg1,arg2)
       return arg1-arg2

导入模块

  • Python导入模块有很多方式:
    1.import Modules
    2.from modules import fun
    3.from…import *

模块加载

  • 当你导入一个模块,python解释器对模块位置的搜索顺序是:
    1.当前目录
    2.如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
    3.如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
    4.模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

模块函数

  • Python有相应的模块函数获取模块信息
    | 函数 | 描述 |
    | ------------ | ------------ |
    | dir() | 返回的列表容纳了在一个模块里定义的所有模块,变量和函数。 |
    | globals() | 返回的是所有在该函数里能访问的全局名字。 |
    | reload() | 重新导入之前模块,顶层模块会重新执行一次。 |

  • 包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。通俗的讲,包就是文件夹
  • 创建一个package_runoob包,包中有runoob1.py, runoob2.py, init.py
  • 创建一个package_runoob包,包中有runoob1.py, runoob2.py, init.py package_runoob 同级目录下创建 test.py 来调用 package_runoob 包

测试