zoukankan      html  css  js  c++  java
  • 12 Python 函数

    初识函数定义与调用

      定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。

         def 是固定的,不能变,必须是连续的def三个字母,不能分开。。。它们要相亲相爱的在一起。

         空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格、3格或者你想空多少都行,但正常人还是空1格。

         函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能

         括号:是必须加的,先别问为啥要有括号,总之加上括号就对了!

      注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。

      调用:就是 函数名() 要记得加上括号。

     1 #函数定义
     2 def mylen():
     3     """计算s1的长度"""
     4     s1 = "hello world"
     5     length = 0
     6     for i in s1:
     7         length = length+1
     8     print(length)
     9 
    10 #函数调用  
    11 mylen()
    View Code

    函数的返回值

      return关键字的作用

        return 是一个关键字,在pycharm里,你会看到它变成蓝色了。你必须一字不差的把这个单词给背下来。

        这个词翻译过来就是“返回”,所以我们管写在return后面的值叫“返回值”

        要研究返回值,我们还要知道返回值有几种情况:分别是没有返回值、返回一个值、返回多个值

     1 def mylen():
     2     """计算s1的长度"""
     3     s1 = "hello world"
     4     length = 0
     5     for i in s1:
     6         length = length+1
     7     return length
     8 
     9 #函数调用
    10 str_len = mylen()
    11 print('str_len : %s'%str_len)
    View Code

      没有返回值

        不写return的情况下,会默认返回一个None:我们写的第一个函数,就没有写return,这就是没有返回值的一种情况。 

         return None:和上面的两种情况一样,我们一般不这样写。

      返回一个值

            只需在return后面写上要返回的内容即可。

        注意:return和返回值之间要有空格,可以返回任意数据类型的值

     1 #函数定义
     2 def mylen():
     3     """计算s1的长度"""
     4     s1 = "hello world"
     5     length = 0
     6     for i in s1:
     7         length = length+1
     8     return length
     9 
    10 #函数调用
    11 str_len = mylen()
    12 print('str_len : %s'%str_len)
    View Code

      返回多个值

        可以返回任意多个、任意数据类型的值

     1 def ret_demo1():
     2     '''返回多个值''' 
     3     return 1,2,3,4
     4 
     5 
     6 def ret_demo2():
     7     '''返回多个任意类型的值'''
     8     return 1,['a','b'],3,4
     9 
    10 ret1 = ret_demo1()
    11 print(ret1)
    12 ret2 = ret_demo2()
    13 print(ret2)
    View Code

      返回的多个值会被组织成元组被返回,也可以用多个值来接收

     1 def ret_demo2():
     2     return 1,['a','b'],3,4
     3 
     4 #返回多个值,用一个变量接收
     5 ret2 = ret_demo2()
     6 print(ret2)
     7 
     8 #返回多个值,用多个变量接收
     9 a,b,c,d = ret_demo2()
    10 print(a,b,c,d)
    11 
    12 #用多个值接收返回值:返回几个值,就用几个变量接收
    13 a,b,c,d = ret_demo2()
    14 print(a,b,c,d)
    15  
    16 
    17 >>> 1,2  #python中把用逗号分割的多个值就认为是一个元组。
    18 (1, 2)
    19 >>> 1,2,3,4
    20 (1, 2, 3, 4)
    21 >>> (1,2,3,4)
    22 (1, 2, 3, 4)
    View Code

      序列解压扩展

     1 #序列解压一
     2 >>> a,b,c,d = (1,2,3,4)
     3 >>> a
     4 1
     5 >>> b
     6 2
     7 >>> c
     8 3
     9 >>> d
    10 4
    11 #序列解压二
    12 >>> a,_,_,d=(1,2,3,4)
    13 >>> a
    14 1
    15 >>> d
    16 4
    17 >>> a,*_=(1,2,3,4)
    18 >>> *_,d=(1,2,3,4)
    19 >>> a
    20 1
    21 >>> d
    22 4
    23 #也适用于字符串、列表、字典、集合
    24 >>> a,b = {'name':'eva','age':18} 
    25 >>> a
    26 'name'
    27 >>> b
    28 'age'
    View Code

    函数的参数

      实参与形参

        参数还有分别:

        我们调用函数时传递的这个“hello world”被称为实际参数,因为这个是实际的要交给函数的内容,简称实参。

        定义函数时的s1,只是一个变量的名字,被称为形式参数,因为在定义函数的时候它只是一个形式,表示这里有一个参数,简称形参。  

      传递多个参数

      参数可以传递多个,多个参数之间用逗号分割

    1 def mymax(x,y):
    2     the_max = x if x > y else y
    3     return the_max
    4 
    5 ma = mymax(10,20)
    6 print(ma)
    View Code

    位置参数

      站在实参角度

        1.按照位置传值

    1 def mymax(x,y):
    2     #此时x=10,y=20
    3     the_max = x if x > y else y
    4     return the_max
    5 
    6 ma = mymax(10,20)
    7 print(ma)
    View Code

        2.按照关键字传值

    1 def mymax(x,y):
    2     #此时x = 20,y = 10
    3     print(x,y)
    4     the_max = x if x > y else y
    5     return the_max
    6 
    7 ma = mymax(y = 10,x = 20)
    8 print(ma)
    View Code

        3.位置、关键字形式混着用

    1 def mymax(x,y):
    2     #此时x = 10,y = 20
    3     print(x,y)
    4     the_max = x if x > y else y
    5     return the_max
    6 
    7 ma = mymax(10,y = 20)
    8 print(ma)
    View Code

        正确用法

          问题一:位置参数必须在关键字参数的前面

          问题二:对于一个形参只能赋值一次      

      站在形参角度

        位置参数必须传值

     1 def mymax(x,y):
     2     #此时x = 10,y = 20
     3     print(x,y)
     4     the_max = x if x > y else y
     5     return the_max
     6 
     7 #调用mymax不传递参数
     8 ma = mymax()
     9 print(ma)
    10 
    11 #结果
    12 TypeError: mymax() missing 2 required positional arguments: 'x' and 'y'
    View Code

    默认参数

        1.正常使用

          使用方法

          为什么要有默认参数:将变化比较小的值设置成默认参数

        2.默认参数的定义

    1 def stu_info(name,sex = "male"):
    2     """打印学生信息函数,由于班中大部分学生都是男生,
    3         所以设置默认参数sex的默认值为'male'
    4     """
    5     print(name,sex)
    6 
    7 
    8 stu_info('alex')
    9 stu_info('eva','female')
    View Code

        3.参数陷阱:默认参数是一个可变数据类型

    1 def defult_param(a,l = []):
    2     l.append(a)
    3     print(l)
    4 
    5 defult_param('alex')
    6 defult_param('egon')
    View Code

    动态参数

      按位置传值多余的参数都由args统一接收,保存成一个元组的形式

      *args求和应用

    1 def mysum(*args):
    2     the_sum = 0
    3     for i in args:
    4         the_sum+=i
    5     return the_sum
    6 
    7 the_sum = mysum(1,2,3,4)
    8 print(the_sum)
    View Code

      **kwargs应用

    1 def stu_info(**kwargs):
    2     print(kwargs)
    3     print(kwargs['name'],kwargs['sex'])
    4 
    5 stu_info(name = 'alex',sex = 'male')
    View Code

    面向过程编程的问题:代码冗余、可读性差、可扩展性差(不易修改)

      定义函数的规则:

        1.定义:def 关键词开头,空格之后接函数名称和圆括号()。

        2.参数:圆括号用来接收参数。若传入多个参数,参数之间用逗号分割。参数可以定义多个,也可以不定义。参数有很多种,如果涉及到多种参数的定义,应始终遵循位置参数、*args、默认参数、**kwargs顺序定义。如上述定义过程中某参数类型缺省,其他参数依旧遵循上述排序

        3.注释:函数的第一行语句应该添加注释。

        4.函数体:函数内容以冒号起始,并且缩进。

        5.返回值:return [表达式] 结束函数。不带表达式的return相当于返回 None def 函数名(参数1,参数2,*args,默认参数,**kwargs):

         """注释:函数功能和参数说明""" 函数体 …… return 返回值

      调用函数的规则:

      1.函数名()
          函数名后面+圆括号就是函数的调用。
      2.参数:
          圆括号用来接收参数。
          若传入多个参数:
              应按先位置传值,再按关键字传值
              具体的传入顺序应按照函数定义的参数情况而定
      3.返回值
          如果函数有返回值,还应该定义“变量”接收返回值
          如果返回值有多个,也可以用多个变量来接收,变量数应和返回值数目一致
    
      无返回值的情况:
        函数名()
    
      有返回值的情况:
        变量 = 函数名()
    
      多个变量接收多返回值:
        变量1,变量2,... = 函数名()

  • 相关阅读:
    201521044091《Java程序设计》第7周学习总结
    201521044091《java程序设计》第四次总结
    201521044091 《java程序设计》第八周学习总结
    201521044091 《Java程序设计》第5周学习总结
    201521044091 《Java程序设计》第2周学习总结
    201521044091 《Java程序设计》第3周学习总结
    MySQL设置字符集CHARACTER SET
    Create My MySQL configuration by Percona
    How to use jQuery to manipulate Cookies
    How to use OpenXml to import xml data to Sql server
  • 原文地址:https://www.cnblogs.com/panfb/p/7811970.html
Copyright © 2011-2022 走看看