函数--返回值、参数和作用域

一、函数的返回值--return的作用

1.return将return后面的值作为函数的输出返回值,当函数被调用时,返回值可以被其他变量接收、使用。

   而print只是打印在控制台,一个函数如果没有return,那么在调用函数时,除了实现函数体的功能之外,

   默认的返回值是None。以下面的代码为例,将return和print的区别:

   def func(a,b):

         res = a+b
         print(res)

   c=func(1,2)

   print(c)

   输出结果:

   3

   None

 

   def func2(a,b):
         res = a+b
         return res

    d=func2(1,2)

    print(d)

    输出结果:

    3

 

2. 如果return有多个返回值,这些值会被默认封装为元组返回,例:   

    def get_user():
          s = 'abc,123'
          username,password = s.split(',')
          return username,password

    print(get_user())

    输出结果:

    ('abc', '123')

 

3. 如果函数执行了 return 语句,函数会立刻返回结束调用,return 之后的其它语句都不会被执行,例:   

    def login():
          for i in range(3):
          username, password = get_user()
          user = input('username:')
          pwd = input('password:')
          if username==user and password==pwd:
                print('登录成功')
                return
          else:
                print('账号/密码错错误!')

     #如果用户输入不到三次就输入正确,执行到return,会立即跳出循环,结束函数

 

二、函数的参数和传参方式--位置参数、默认值参数、可变参数、关键字参数

1.位置参数:必传

   调用函数时,根据函数定义的参数位置来传递参数,顺序必须一一对应,且是必传参数,例:

   def  sum(a,b):

          sum=a+b

          return sum

   sum(2,3)

 

2. 默认值参数:可传可不传

   定义函数时,为参数提供默认值,可以简化函数的调用。设置函数参数时,如果参数有多个,把变化大的参数放前面,

   变化小的参数放后面。变化小的参数就可以作为默认参数。且必须必选参数在前,默认参数在后。

   调用函数时,按顺序传入参数,默认值参数可传可不传,如果不传的话,按函数设置的默认参数值。如果传的话,以传

   入的参数值为准。 如果函数设置了多个默认值参数,传参时可以按顺序提供或不按顺序提供。如果不按顺序提供,

   需要加上参数名。 例:

   def op_file(filename,content=None):

         with open(filename,'a+',encoding='utf-8') as fw:
         fw.seek(0)
         if content:

             fw.write(content)

         else:
            return fw.read()

     op_file('a.txt")  #调用函数,读文件

     op_file('a.txt",’eyiwqueqw')  #调用函数,写文件

 

3.  可变参数:可传可不传

     定义函数时,有时候我们不确定调用的时候会传递多少个参数,比如说多个人发邮件,发邮件的人数不确定。此时

     可以包裹任意个位置参数来进行参数传递,即可变参数。可变参数允许传入0个或任意个参数,这些可变参数在函

     数调用时自动组装为元组。

     def mysql2(*info):

           print(info)

     mysql2("ip","user",878943843,000000,"sefsd","sdfds")

     输出结果: #为元组

     ('ip', 'user', 878943843, 0, 'sefsd', 'sdfds')

 

4.  关键字参数:可传可不传

     函数调用时,传入的含有参数名的参数。位置参数必须是一一对应传入,但是如果全部以关键字参数的

     形式传入,则可以不按顺序,例:

     def mtsql(host,user,password,port,charset,sql,db):

          print("链接mysql")


     mysql(user="root",password="123456",host='192.168.1.3',port='3306',sql='sdfsdf',db='dsfsdf',charset='sdfsdf')

     #调用函数时全部传入关键字参数

     mysql("root","123456",host='192.168.1.3',port='3306',sql='sdfsdf',db='dsfsdf',charset='sdfsdf')

     #如果同时传入位置参数和关键字参数,必须位置参数在前,关键字参数在后

    

     而定义参数时,也允许你传入0个或任意多个关键字参数,这些关键字参数在函数内部自动组装为一个字典,例:   

     def mysql(**info):
           print(info)

      mysql(user="root",password="123456",host='192.168.1.3',port='3306',sql='sdfsdf',db='dsfsdf',charset='sdfsdf')

      输出结果: #为字典

      {'user': 'root', 'password': '123456', 'host': '192.168.1.3', 'port': '3306', 'sql': 'sdfsdf', 'db': 'dsfsdf', 'charset': 'sdfsdf'}

 

5. 参数组合:

      函数可同时用必选参数、默认参数、可变参数和关键字参数,参数定义的顺序必须是:必选参数、默认参数、可变参数

      和关键字参数。

      def func(a,b,c=0,*args,**kw):

            print(‘a=’,a,‘b=’,b,'c=',c,'args=',args,'kw=',kw)

      func(1,2,3,'a’,‘b’,s=123)

      输出结果: 

      a=1,b=2,c=3,args=('a','b’),kw={'s':123}

6. 另外两种传参方式

    *传递元组或列表,让元组或列表的每一个元素对应一个位置参数:

    def calc(a,b):
          print(a+b)
          return(a+b)

    L=[1,2]
    calc(*L)

    **传递字典,让字典的每个键值对作为一个关键字参数传递给函数:    

    def mysql(host,user,password,port,charset,sql,db):

          print('连接mysql')

    dic = {
                'host':'192.168.1.1',
                'user':'root',
                'password':123456,
                'port':3306,
                'charset':'utf-8',
                'sql':'sql',
                'db':'db'
             }

     mysql(**dic)

      

 

 

     

 

     

       

   

   

 

posted @ 2018-12-03 21:07  杨静静  阅读(783)  评论(0编辑  收藏  举报