zoukankan      html  css  js  c++  java
  • 第六课 函数基础

    第六课 函数基础

    一、函数的定义

      函数就是对代码进行一个封装。把实现,某一功能的相同代码,进行封装到一起。下次需要使用时,就不需要再进行代码编写,直接调用即可。

      内置函数就是把一些需求量比较大的函数进行统一封装,便于调用。

      好处:增加代码的复用性,增加代码可读性,减少代码的编写量,降低维护成本 。

      函数名的命名遵循驼峰规则,最好能借名之义。

      

    定义方法:
    def
    function_name(params): #def 关键字表示定义一个函数。 function_name 函数名,和变量名的命名要求相同,以字母和_开头,可以包含字母、数字和_。 params 表示参数,可以是零个,一个 或者多个参数,函数参数不用指定参数类型。 block return expression(表达式)/value 例子: def DieDai(iter): #函数名为DieDai,参数是iter for i in iter: #这就是一个取出可迭代对象里面的值的循环 print(i)
    输出结果:

    二、参数形式

      1、不传参数

    def fun1():  #由于在定义函数的时候没有输入参数,所以这个函数不能传参数,在没有传参数的时候就能运行这个函数
        print('不能传参数')
    输出结果:

       2、必备参数

    def fun2(a):    #在定义函数的时候输入了参数,调用的时候必须传入参数
           print('必须传参数:',a)
    输出结果:

       3、默认参数

    def fun3(b=1): #可以传参,也可以不传参,不传参时输出默认值,传参时输出传参值,传参时可以直接输入4,也可以指定输入b=4
        print('默认参数',b)
    输出结果:

       4、可选参数(不定长参数)

    def fun4(*arg): #可传0个到多个参数;不传参时输出空元组;*是必须的,arg可自定义;将参数包装成元组;传参时打入*号可以解包(把里面的壳去掉),*{}输出其中的键,不加*号将{}当成一个元素
        print('可选参数,可传0个到多个:',arg)
    输出结果:

       5、关键字参数

    def fun5(a,b): #定义的时候跟必备参数是一样的,关键字参数其实是一种必备参数 ,混合传参的时候必须要放最后
        print(a,b)
    def fun6(**kwarg): #可传0个到多个,不传是输出一个空字典;定义的时候遵循变量命名规则;**是必须的,kwarg是约定俗成,可以自定义;将传参包装成字典;**{}这种形式下keyword必须是字符串 print('关键字参数',kwarg) 关键字参数有两种,上面一种没有明确的界限,在传参的时候都可以用=号的形式来,上面一种本身是必备参数。
    输出结果:

       6、参数混合的时候如何传参

    参数混合的时候,关键字参数必须放最后面
    默认参数加必备参数
    def fun7(a,b=2): #默认参数必须在必备参数的后面
        print(a,b)
    调用的时候:
    fun7(1,b=2)
    fun7(a=1,b=2)
    fun7(1,2)     #默认参数也可以不指定
    fun7(a=1,2) #会报错,用为关键字参数必须放最后面
    fun7(2,a=1) #会报错,在传参时会根据定义时的顺序来传参,确保必备参数能够拿到值,并且只能有一个
    输出结果:
    def fun8(b,m=1,*a):
    print(b) print(m) print(a) 错误输入情况: fun8(1,m=1,1,2,3,4) #错误原因:因为关键字参数m=1必须放最后 fun8(1,1,2,3,4,m=1) #错误原因:因为根据定义顺序,先是第二位定义了一个m=1,最后面又定义了一个m=1,重复定义 正确输入: fun(1,2,3,4,5)

    输出结果:

    def fun9(*a,b,m):
    print(a,b,m)
    正确输入:
    fun9(1,2,3,b=1,m=2)
    输出结果:
    def fun11(a,b=1,*arg,**kwarg):
        print('这是必备参数:',a)
        print('这是默认参数:',b)
        print('这是可选参数(不定长参数)',arg)
        print('这是关键词参数',kwarg)
        return 'OK'
    
    正确输入:fun11(1,2,1,2,3,x=1,y=2,z=3)
    输出结果:
                 
    或者
    def fun11(a,*arg,b=1,**kwarg):
        print('这是必备参数:',a)
        print('这是默认参数:',b)
        print('这是可选参数(不定长参数)',arg)
        print('这是关键词参数',kwarg)
        return 'OK'
    
    正确输入:fun11(1,1,2,3,b=3,x=1,y=2,z=3) #b的位置可以在字典的前后
    输出结果:

     三、return

      return的作用:

      1、返回函数的运行结果

    def fun1(a,b):           if a>b:
            return a
    
    def fun2(a,b):           if a>b:
            print(a)    
    fun1和fun2的区别是若将a=fun1(2,1),a=2;b=fun2(2,1),b=None
    return返回了fun1的运行结果
    运行结果:

      2、函数结束的标志

    def fun10(a,b):
        return('我下不去了') #终止函数的标志,可以放在任何地方
        if a>b:
            print(a)
    输出结果:

     四、lambda 匿名函数

      fun()是一个函数,fun就是一个函数体

    lambda函数就是没有函数名的函数

    g=lambda x:x+1 等同于: def g(x): return(x+1)

    lambda简化了函数定义的书写形式。是代码更为简洁,但是使用函数的定义方式更为直观,易理解

      应用场景:
        1.有些函数如果只是临时一用,而且它的业务逻辑也很简单时,就没必要用def 来定义,这个时候就可以用lambda。
        2.函数都支持函数作为参数,lambda 函数就可以应用

    四、作业

      1、找到1-100内的质数,用while和for来做,结束之后打印“搜索结束”。(质数:只能被1和自己整除,如2,只有除以1和2才能整除)

         思路:先判断一个数字是不是质数,比如15,将15除以2到14,若存在能够整除无余,就说明这是一个合数,否则就是一个质数

    j=15                   #先确定一个数字j
    for i in range(2,15):    #确定被除的数字也就是(2-14)
         if j%i==0:             #遍历j除以i,若存在整除现象,说明是个合数
            print(j,'是一个合数')
            break
    else:                           #否则,就是一个质数
        print(j,'是一个质数')
    输出结果:

         思路:然后再将1-100的数放入j即可

    j=1
    while j<101:               #外面是一个将1-100的数字填入j的while循环
        for i in range(2,j):   #里面是一个检验每个数字是否是质数的for循环 
            if j%i==0:
                break
        else:
            print(j,end=' ')   
        j+=1
    else:
        print()
        print('搜索结束') 
    
    输出结果:
    或者
    num=[]                       #也可以建立个列表
    for j in range(1,101):
        for i in range(2,j):
           if j%i==0:
                break
        else:
            num.append(j)    #将每一个符合质数的数字填入列表num
    else:
        print(num)              #最后输出列表
        print('搜索结束') 
    输出结果:
    
    

       3、定义一个函数,能够输入元组和字典。将字典的值(value)和元组的值交换,交换结束后返回字典和元组。

        思路:输入元组和字典:要输入元组,说明要*arg;要输入字典,说明要**kwarg。def change(*arg,**kwarg)

        思路:交换字典的值和元组的值:先定义一个元组tu=(1,2,3),一个字典di=('a':11,'b':22,'c':33),要将123和11,12,13进行交换,要交换必须要将元组改变为可变(列表):tu=list(tu)。在传参的时候应该输入change(*tu,**di),因为如果直接输入tu的话会把里面的元素直接定义为1个元素出现((1,2,3,),)的现象。若要交换可以直接用tu[0],di['a']=di['a'],tu[0]。

    def change(*arg,**kwarg):    
        arg=list(arg)      #将元组arg转化列表
        i=0                    #为列表第一个元素定义索引
        for key in kwarg.keys():   #遍历字典所有的键
            arg[i],kwarg[key]=kwarg[key],arg[i]  #交换字典kwarg和列表arg的值
            i+=1              #让列表跟着字典的键做循环,字典键+1,列表索引也加1
        else:
            print(kwarg)    #输出更改后的字典    
            print(tuple(arg))  #输出更改后的元组,不过要将列表元组化
    输出结果:

      同时,由于列表arg是跟着字典kwarg的键做循环的,所以元组比字典多一个只没关系,反之则不行。

      

  • 相关阅读:
    Java实现 LeetCode 792 自定义字符串排序(暴力)
    Java实现 LeetCode 792 自定义字符串排序(暴力)
    asp.net session对象的持久化
    Java实现 LeetCode 791 自定义字符串排序(桶排序)
    Java实现 LeetCode 791 自定义字符串排序(桶排序)
    Java实现 LeetCode 791 自定义字符串排序(桶排序)
    Java实现 LeetCode 790 多米诺和托米诺平铺(递推)
    Java实现 LeetCode 790 多米诺和托米诺平铺(递推)
    Java实现 LeetCode 790 多米诺和托米诺平铺(递推)
    小白也能看懂的约瑟夫环问题
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/8311631.html
Copyright © 2011-2022 走看看