本章介绍Python中模块和函数的概念。

  Python程序是由包、模块和函数三者组成,包是由一系列模块组成的集合,模块是处理某一类问题的函数和类的集合。Python提供的许多工具包和模块安装在Python的安装目录下的lib子目录中。例如,在Python安装目录下lib目录下,有一个sqlite3文件夹,该文件夹就是一个包,这个包用于完成连接sqlite3数据库的基本操作。在sqlite3文件夹下有一个test的子包,还有一个_init_.py文件,该文件是sqlite3包的注册文件,如果没有该文件,Python将不能识别sqlite3包。包必须至少包含一个_init_.py文件,该文件的内容可以为空。_init_.py用于标识当前文件夹是一个包。

Python程序设计5——函数

  对于一个函数来说,包括三个方面,函数的定义、函数的调用和函数的执行,函数的定义使用def来定义一个函数,光有函数的定义是不行的,函数还必须得到有效的调用,否则这个函数是没有用的,调用函数后,系统就会一条条执行函数的语句。

1.1 函数的定义                      

  函数定义非常简单,使用保留字def声明即可,在定义函数时候需要定义返回值类型.语法如下:

def function_name(参数列表):
    statement
    [return value]

例如:

def hello():
    print 'Hello World'

  python允许返回多个参数,但是本质上还是只有一个参数,只是将这些参数进行了打包,以元组、列表形式返回。

  其中,返回值不少必须的,如果没有return语句,则Python默认返回值为None。注意函数列表后面有一个冒号,和循环语句一样。
下面定义一个函数

def login(username, password):
    if(username == 'admin') and (password == 'admin'):
        print 'login succeed'
    else:
        print 'login failed'
username = raw_input('Please enter your name:')
password = raw_input('Please enter your password:')
login(username, password)

1.2 函数形参与默认参数值     

  参数的传递有两种方式:值传递和引用传递。无论是实际参数还是形式参数在函数定义的圆括号内指定,用逗号隔开,当调用函数的时候,也需要用同样的方式提供值。形参是函数定义时候,在函数签名里面的,调用时候赋予函数调用时的值叫实参。Python通过名字绑定机制,把实际参数的值和形式参数的值绑定在一起,即把形式参数传递到函数所在的局部命名空间中,形式参数和实际参数指向内存中的同一个存储空间。
1.默认参数值
  函数的参数支持默认值。当某个参数没有传递实际值时,函数将使用默认参数计算,例如可以向login()函数的username参数和password参数分别提供一个默认值。

def login(username = 'aq', password = 'aq'):
    if(username == 'admin') and (password == 'admin'):
        print 'login succeed'
    else:
        print 'login failed'
#提供几个参数
login('admin', 'admin')
login('admin')
login(password = 'admin')
login()       
运行结果:
login succeed
login failed
login failed
login failed

分析:第一次调用时候,分别提供了两个实际参数,这两个参数会覆盖掉定义函数时候提供的默认值。也就是username和password的值均为admin,因此符合条件,可以通过。第二次调用时候只提供了一个参数,这个参数会被当作提供给第一个形参,也就是username值为admin,而password依然采用默认值,也就是aq,因此不通过。第三次调用时候提供了password的实参,但username依然采用默认的,所以不通过。第四次调用没有提供参数,所以都采用默认值,因此也不会通过。
2.列表作形参
  参数可以是变量,也可以是元组、列表等内置数据结构,例如:

def login(usernames = [], password = "admin"):
    username = usernames[0]
    if(username == 'admin') and (password == 'admin'):
        print 'Login success'
    else:
        print 'Login failed'
login(['admin', 'aq'])
输出结果:Login success

3.可变长度参数值
  在程序开发中,常常需要传递可变长度的参数。在函数的参数前使用标识符*,可以实现这个要求,*可以引用元组,将多个参数组合在一个元组中。

def login(*userpwds):
    username = userpwds[0]
    password = userpwds[1]
    if(username == 'admin') and (password == 'admin'):
        print 'Login success'
    else:
        print 'Login failed'
login('admin','admin')
运行结果:Login success

  在该函数中,用*标识符定义了可变长度的参数userpwds,通过它可以引用一个元组,并索引参数进行赋值。
4.字典作形参
  Python还提供了另一个标识符**,在形式参数前面加上**,可以引用一个字典作为参数。下面这段代码实现了在一个字典中匹配元组的元素。

#传递字典类型的参数

def login(**userpwds):
    keys = userpwds.keys()
    username = ''
    password = ''
    for key in userpwds:
            if 'username' == key:
                    username = userpwds[key]
            if 'password' == key:
                    password = userpwds[key]
    if(username == 'admin') and (password == 'admin'):
            print 'Login success'
    else:
            print 'Login failed'
login(username = 'admin',password = 'admin')
View Code

相关文章:

  • 2021-08-31
  • 2021-08-22
  • 2021-09-16
  • 2022-12-23
  • 2021-05-26
  • 2021-12-26
  • 2021-09-29
猜你喜欢
  • 2022-01-27
  • 2022-03-04
  • 2021-07-12
  • 2022-12-23
  • 2021-03-28
  • 2021-09-16
  • 2022-12-23
相关资源
相似解决方案