前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python之函数学习(八)

Python之函数学习(八)

作者头像
无涯WuYa
发布2018-10-25 16:00:31
5320
发布2018-10-25 16:00:31
举报

python语言,即可以进行函数式的编程的语言,又是可以进行面向对象编程的语言,所谓函数,简单的理解就是将一些语句集合到一起,这样可以在程序中多次的调用,而不需要为了某个功能写重复性的代码,这就是函数的魅力所在。在python中,函数的定义是使用关键字def,下面先来定义一个简单的函数,通过这个例子来认识函数,见代码:

def f():
   print('Hello World')

在如上的代码中,可以看到自定义了函数f,函数中输出是 :Hello World,那么编写函数后,怎么来进行调用函数了,函数的调用也是很简单的,像如上的函数调用为:f(),就会输出:Hello World

作为函数来说,都是有参数的,如写一个函数为:二个数想加,返回它的结果值,那么该函数为:

在如上的代码中,可以看到,定义了add的函数,参数分别是a,b,函数的返回值是a+b和的结果,在该函数中,a和b就是函数的形式参数,那么什么是实际参数了,调用函数add(2,3),在这里,2和3就是函数的实际参数,另外特别的注意,在函数中,return后还可以执行其他的语句,答复是不行的,切记,在函数中,一旦执行了return后,函数执行过程立即终止,不再执行,在函数中,return后是函数的返回值,如果没有return,函数的默认返回值是None。

在python语言中,函数可以有默认的参数,这是其他语言所不具备的,当然,也可以对默认的参数依据实际的需求进行修改,在具体的项目中依据集体的案例来进行。就仍然以add函数为案例来说明,见函数的默认参数的代码:

调用函数的时候,如果不对函数的默认参数进行修改,该函数返回的结果是5,当然,也可以对其中一个函数二个参数都进行修改,再调用函数,见修改第一个参数后,函数执行的结果:

也可以对二个参数都进行修改,见修改的代码以及执行的结果:

在如上的案例中,可以清晰的看到,函数的默认参数,可以修改,也可以不修改,具体的情况依据在项目中具体的情况来进行应用,但是特别得注意,在一个函数中,如果有多个形式参数,那么默认参数只能是最后一个参数,不能把默认参数在前面,其他的形式参数在后面,这样代码会提示错误的,见错误信息:

在如上中,可以看到,如果默认参数在前面,形式参数在后面,该函数代码提示错误。在python的数据结构中,分别是列表,元组,字典,以及set集合,在实际的项目中,函数的参数也有可能是动态参数,那么有么有可能,让元组或者字典成为函数的参数了,当然是可以的,在python的函数中,*代表元组,**代表字典,下面就分别就实际的案例来说明这个过程,定义一个函数,以元组作为参数,输出参数并查看参数的类型,见

代码以及输出:

在截图中,可以看到函数的参数是元组,在具体以实际的案例再说明这个过程的应用

再来当函数的参数为字典的时候,来演示这样的一个结果,见代码:

可以看到,调用函数的时候,需要说明key和value的值,来演示参数直接是字典,看调用的过程,见如下:

可以看到,代码不同,但是输出的实际结果是一致的。 函数的参数很多时候是静态的,也就是说是普通参数或者是默认参数,以动态参数(*args,**kwargs)的形式,使用的比较少,下面就以函数的动态参数,来实现format的输出,来演示这样的一个过程,大家都知道format是格式化字符串的输出,如:

如果使用*args或者**kwargs实现,实现的效果为:

在函数中,必须要搞清楚,什么是全局变量,什么是局部变量,以及全局变量在函数中的使用,全局变量简单的理解就是在一个模块中的函数都是可以引用的,局部变量仅仅限于在本函数内使用,见实例以及实例的输出:

从函数的执行结果可以看出,f1()输出的是局部变量,f2()函数输出的是全局变量,在函数中,可以修改全局变量吗?假设我想让f1()输出的是全局变量,答案是可以的,使用关键字:global,使用方法为:global 全局变量名称,表示对全局变量重新赋值,对如上的实例修改后,见输出:

函数可以实现模块化的一个过程,比如登录,注册,下面就以函数式的编程实现这个过程,见代码:

def login(username,password):
   """
   用于用户登录
   :param username:用户输入的用户名
   :param password:用户输入的密码
   :return:True,表示登录成功;False:表示登录失败
   """
   f=open('db','r')
   for line in f:
      list=line.split('|')
      if list[0]==username and list[1]==password:
         #登录成功
         return  True
   #用户名或者密码错误
   return False
def info():
   '''登录成功后,获取用户的信息'''
   f=open('db','r')
   for line in f:
      list=line.split('|')
      print('恭喜您登录成功,你的账号为:',list[0])


def register(username,password):
   '''注册函数'''
   f=open('db','a')
   temp=username+'|'+password
   f.write(temp)
   f.close()

def exit():
   '''退出函数'''
   import  sys
   sys.exit(1)

def main():
   while True:
      t=int(input('1、登录 2、注册 3、退出\n'))
      if t==1:
         username=input('请输入用户名:\n')
         password=input('请输入密码:\n')
         r=login(username,password)
         if r:
            print('login success')
            info()
         else:
            print('login fail')
      elif t==2:
         username=input('请输入注册的用户名:\n')
         password=input('请输入注册的密码:\n')
         register(username,password)
      elif t==3:
         exit()

if __name__ == '__main__':
   main()
 
  在python中,三目运算符是很有意思的,特别是在if和else中,可以少写代码,比如写一个判断,见代码:
a=1
if a==1:
   name='python'
else:
   name='java'
如果使用三目运算符,可以很简单的把代码缩小,见实现的效果:
name='python' if a=1 else 'java'

   下面来看lambda表达式,lambda是匿名函数,它的实现效果是为:
函数名称=lambda 函数参数:表达式,见具体的代码:
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档