zoukankan      html  css  js  c++  java
  • python-函数篇

    python函数基础

    一.函数

    1.函数简介

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

    函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

    1)为什么用函数:

      然后现在有一个需求,让你计算'hello world'的长度,你怎么计算?

    1 s1 = "hello world"
    2 length = 0
    3 for i in s1:
    4     length = length+1
    5 
    6 print(length)

    好了,功能实现了,非常完美。然后现在又有了一个需求,要计算另外一个字符串的长度,"hello hx".

     1 s1 = "hello world"
     2 length = 0
     3 for i in s1:
     4     length = length+1
     5 
     6 print(length)
     7 
     8 s2 = "hello eva"
     9 length = 0
    10 for i in s2:
    11     length = length+1
    12 
    13 print(length)   
    结果:第一个程序输出是11,第二个程序输出是9。

    这样确实可以实现len方法的效果,但是总感觉不是那么完美?为什么呢?

    首先,之前只要我们执行len方法就可以直接拿到一个字符串的长度了,现在为了实现相同的功能我们把相同的代码写了好多遍 —— 代码冗余

    其次,之前我们只写两句话读起来也很简单,一看就知道这两句代码是在计算长度,但是刚刚的代码却不那么容易读懂 —— 可读性差

    print(len(s1))
    print(len(s2))

    初识函数定义与调用

      函数的有三中不同的参数:

      普通参数

      默认参数

      动态参数

    定义函数的几点要素:

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

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

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

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

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

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

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

    #函数定义
    def mylen(s1):
        """计算s1的长度"""
        length = 0
        for i in s1:
            length = length+1
        return length
    
    #函数调用
    str_len = mylen("hello world")
    print('str_len : %s'%str_len) 

    函数的返回值

    #函数定义
    def mylen():
        """计算s1的长度"""
        s1 = "hello world"
        length = 0
        for i in s1:
            length = length+1
        print(length)
    
    #函数调用
    str_len = mylen()      由于没有返回值,所以str_len接收到的是None,所以打印的也是None
    print('str_len : %s'%str_len)
    

    如果你执行这段代码,得到的str_len 值为None,这说明我们这段代码什么也没有给你返回。

    那如何让它也想len函数一样返回值呢?

    #函数定义
    def mylen():
        """计算s1的长度"""
        s1 = "hello world"
        length = 0
        for i in s1:
            length = length+1
        return length
    
    #函数调用
    str_len = mylen()
    print('str_len : %s'%str_len)
    结果:返回11

      

    函数的执行顺序

    我们只需要在函数的最后加上一个return,return后面写上你要返回的值就可以了。

    接下来,我们就来研究一下这个return的用法。

    return关键字的作用

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

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

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

    没有返回值

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

    只写return,后面不写其他内容,也会返回None,有的同学会奇怪,既然没有要返回的值,完全可以不写return,为什么还要写个return呢?这里我们要说一下return的其他用法,就是一旦遇到return,结束整个函数。  

    #函数定义
    def mylen():
        """计算s1的长度"""
        s1 = "hello world"
        length = 0
        for i in s1:
            length = length+1
        return length
    
    #函数调用
    str_len = mylen()
    print('str_len : %s'%str_len)
    

    返回多个值

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

    def ret_demo1():                #返回值如下
        return 1                    #1
    def ret_demo2():
        return 1,2                  #(1,2)
    def ret_demo3():
        return ['a','b']            #['a','b']
    def ret_demo4():
        return 1,[],                #(1,[])
    def ret_demo5():
        return 1,(1,2),{'a':'b'}    #(1, (1, 2), {'a': 'b'}),以上都为一个值接收
    def ret_demo6():       
       return 1, #(1,)返回的也是个元组
    c= ret_demo*() print(c) --------------------------------------------------------------------------- def ret_demo5(): return 1,(1,2),{'a':'b'} a,b,c= ret_demo5() #返回多个值,就用多个值接收 1 (1, 2) {'a': 'b'} print(a,b,c)

     总结:当返回一个值的时候就是个字符串,当返回多个值的时候是以元组的形式返回,如果return 'a',返回的就是a。

    函数的传参

    我们告诉mylen函数要计算的字符串是谁,这个过程就叫做 传递参数,简称传参,我们调用函数时传递的这个“hello world”和定义函数时的s1就是参数

    实参与形参

    参数还有分别:

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

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

    传递多个参数

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

    def mymax(x,y):
        the_max = x if x > y else y
        return the_max
    
    ma = mymax(10,20)
    print(ma)
    

      

    位置参数

      站在实参角度

        1.按照位置传值

    def mymax(x,y):
        #此时x=10,y=20
        the_max = x if x > y else y
        return the_max
    
    ma = mymax(10,20)
    print(ma)
    

        2.关键字参数

    def mymax(x,y):
        #此时x = 20,y = 10
        print(x,y)
        the_max = x if x > y else y
        return the_max
    
    ma = mymax(y = 10,x = 20)
    print(ma)
    

        3.位置,关键字两种形式的混用

    def mymax(x,y):
        #此时x = 10,y = 20
        print(x,y)
        the_max = x if x > y else y
        return the_max
    
    ma = mymax(10,y = 20)
    print(ma)
    

      

          正确用法

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

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

      站在形參角度

        位置参数必须传值

    def mymax(x,y):
        #此时x = 10,y = 20
        print(x,y)
        the_max = x if x > y else y
        return the_max
    
    #调用mymax不传递参数
    ma = mymax()
    print(ma)
    
    #结果
    TypeError: mymax() missing 2 required positional arguments: 'x' and 'y'
    

      

    默认参数

        1.正常使用

          使用方法

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

        2.默认参数的定义

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

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

    def defult_param(a,l = []):
        l.append(a)
        print(l)
    
    defult_param('alex')
    defult_param('egon')
    

      

    动态参数

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

    #*args (按位置传参,元组)

    #**kwargs (按关键字传参,字典)

    def mysum(*args):
        the_sum = 0
        for i in args:
            the_sum+=i
        return the_sum
    
    the_sum = mysum(1,2,3,4)
    print(the_sum)
    
    
    -------------------------------------------------------------------------------------------
    
    
    def stu_info(**kwargs):
        print(kwargs)
        print(kwargs['name'],kwargs['sex'])
    
    stu_info(name = 'alex',sex = 'male')

    函数使用小节 

    定义函数的规则:

    1.定义:def 关键词开头,空格之后接函数名称和圆括号()。
    2.参数:圆括号用来接收参数。若传入多个参数,参数之间用逗号分割。
        参数可以定义多个,也可以不定义。
        参数有很多种,如果涉及到多种参数的定义,应始终遵循位置参数、*args、默认参数、**kwargs顺序定义。
        如上述定义过程中某参数类型缺省,其他参数依旧遵循上述排序
    3.注释:函数的第一行语句应该添加注释。
    4.函数体:函数内容以冒号起始,并且缩进。
    5.返回值:return [表达式] 结束函数。不带表达式的return相当于返回 None
    
    def 函数名(参数1,参数2,*args,默认参数,**kwargs):
            """注释:函数功能和参数说明"""
            函数体
            ……
            return 返回值  

    调用函数的规则

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

      

      

  • 相关阅读:
    基于摸板匹配的目標跟蹤算法
    spoj 2713 Can you answer these queries IV
    zoj 3633 Alice's present
    hdu 3642 Get The Treasury
    poj 1195 Mobile phones
    poj 2760 End of Windless Days
    zoj 3540 Adding New Machine
    spoj 1716 Can you answer these queries III
    spoj 1043 Can you answer these queries I
    spoj 2916 Can you answer these queries V
  • 原文地址:https://www.cnblogs.com/huangxu/p/7237393.html
Copyright © 2011-2022 走看看