zoukankan      html  css  js  c++  java
  • python 之路之函数01

    一   函数

    那么要想学习函数,我们首先应该知道函数是什么?

    我们这里所说的函数与数学中的函数是不同的概念,在这里我们可以把函数看成我们写代码过程中需要用到的工具。

    那么这个‘工具’有什么作用呢?

         1, 首先会让我们的代码变的结构变得清晰,可读性强。

         2 ,我们不需要再进行大量的重复代码编写,避免代码过长,导致冗余,可读性变差。

         3 ,修改代码变得简单,只需要找出需要修改的地方,修改之后其他地方有重复功能的代码不需要重复的修改。

    二 函数的分类

    1、内置函数
    为了方便我们的开发,针对一些简单的功能,python解释器已经为我们定义好了的函数即内置函数。对于内置函数,我们可以拿来就用而无需事先定义,如len(),sum(),max()
    
    2、自定义函数
    很明显内置函数所能提供的功能是有限的,这就需要我们自己根据需求,事先定制好我们自己的函数来实现某种功能,以后,在遇到应用场景时,调用自定义的函数即可。例如

    三 函数的定义

    首先定义函数有一个固定的形式:

    定义函数的形式:
    def 函数名(参数1,参数2,参数3,...):
        '''注释:表达函数体的功能'''
        函数体#实现函数具体功能的部分
        return 返回的值
    
    #我们在定义函数名是,要尽可能的让函数名要能反映其意义

    四  函数的使用原则

    先定义后使用

    我们有时候说:函数即“变量”,那么“变量”必须先定义后引用。未定义而直接引用函数,就相当于在引用一个不存在的变量名,必定会报错。
    #1
    def foo():
        print('from foo')
        bar()
    foo() #报错
    在这个程序里面我们没有定义bar()这个函数,所以在使用的时候就会出现报错
    
    
    #2
    def bar():
        print('from bar')
    def foo():
        print('from foo')
        bar()
    foo() #正常
    在这个过程中我们在使用bar()与foo()之前对他们俩都进行了定义。
    
    
    #3
    def foo():
        print('from foo')
        bar()
        
    def bar():
        print('from bar')
    foo() 
    同样的3也不会报错,那么这是为什么呢?因为在在函数的调用中,在定义阶段是不执行代码的,只检测程序中的语法是否正确。
    
    
    #结论:函数的使用,必须遵循原则:先定义,后调用
    #我们在使用函数时,一定要明确地区分定义阶段:在定义阶段只检测语法正确与否和调用阶段才会执行代码。

    五 定义函数的三种形式

        1  有参函数:

    对于有参函数,即在调用函数段运行过程,需要用户输入输入参数的函数,定义时有参,那么就是有参函数。

    def max(x,y)
      if x>y:
        return x
      else:
         return y
    这段子代码在运行时就需要用户输入需要比较的两个值。

      2  无参函数:

    无参函数,即在调用函数程序运行过程不需要对其输入参数,定义时无参,那么就是无参函数。

    x=1
    y=2
    def max(1,2if x>y:
        return x
      else:
         return y

    对于这段代码用户就不需要输入参数,应为定义时已经指定了参数。

        3  空函数:

    那么对于空函数来说就比较特殊了,他的作用主要是起到一个占位作用,先预留一个位置,这个地方的函数子代码为空,可以不执行任何功能,需要的时候再修改。

    def func()
        pass#函数的子代码为空

    六  调用函数的三种形式

       1 直接变量名加():

    比如:len(),max()等

       2 表达式的方式,因为函数的运行结果一般为一个值,所以我们可以对这个值再进行运算

    比如:max(1,max(2,3)) 

       3 将一个函数的返回值当作另一个函数的参数。

    比如:len(max(x,y))

    七    函数返回值

    那么什么是返回值:

    返回值就是函数体代码运行完毕后需要有一个结果返回给使用者,这个值就是返回值return。

        

        1 没有return则会返回none
    
        2 返回值后跟一个值,那么返回值就是这个值本身。
    
        3 return后可以跟一个值也可以跟多个值,跟多个值时,用逗号分隔开,返回一个元组。

    总结:1 return返回值,没有类型限制。

               2 函数内可以写多个return,return是函数的结束标志位,执行第一个return后程序结束,return后面的值作为本次调用的返回值。 

    作业: 函数

    # 1、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作
    # def modify(file_name,old,new ):
    #     import os
    #     with open(file_name,'r',encoding='utf-8')as f1:
    #      with open('w.txt','w',encoding='utf-8')as f2:
    #         for line in f1:
    #             if old in line:
    #                 line.replace(old,new)
    #             f2.write(line)
    #     os.remove(file_name)
    #     os.rename('w.txt',file_name)
    # modify('a.txt','hh','HH')
    View Code

    # 2、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数
    2#
    # def check(msg):
    #      res={
    #         'num':0,
    #         'string':0,
    #         'space':0,
    #         'other':0,
    #     }
    #      for s in msg:
    #          if s.isdigit():
    #              res['num']+=1
    #          elif s.isalpha():
    #              res['string']+=1
    #          elif s.isspace():
    #              res['space']+=1
    #          else :
    #              res['other']+=1
    #
    #      return res
    # res=check('hdffhk123kdf;fjj,sd   ')
    # print(res)
    View Code

    # 3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
    3#
    # def chang(name):
    #     if len(name)>5:
    #         return 'yes'
    #     else:
    #         return 'no'
    #
    # res=chang((1,2,3,4,4,3))
    # print(res)
    View Code
    #
    # 4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
    # def list1(list):
    #     if len(list)>2:
    #         return list[0:2]
    #     else:
    #         return list
    #
    # res=list1([1,2])
    # print(res)
    View Code

    # 5、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
    5#
    # def func(list):
    #     x=len(list)
    #     return list[0:x:2]
    # res=func([1,2,4,3,4,6,6,4,3,3])
    # print(res)
    View Code

    # 6、写函数,检查字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
    # dic = {"k1": "v1v1", "k2": [11,22,33,44]}
    # PS:字典中的value只能是字符串或列表

    def func(dic):
        d={}
        for key in dic:
            if len(dic[key])>2:
              # d=dic[key][0:2]#为什么这种方式不行呢,因为这种方式会导致d被赋值两次,第一次为v1,第二次d就变成[1122],所以最后的返回值就是[1122]
              d[key]=dic[key][0:2]
        return d#for循环结束之后才执行return
    
    res=func({"k1": "v1v1", "k2": [11,22,33,44]})
    print(res)
    View Code
  • 相关阅读:
    Android 官网提供的Custom-view 编译出错--error: No resource identifier found for attribute
    杀死进程 kill -9
    自定义控件优化
    linux 定时执行任务 crontab
    Android 悬浮窗 WindowManager WindowManager.LayoutParamas
    IntellijIDEA 使用技巧
    [转]Linux 分区 swap
    网络请求 图片请求
    Android app version code and name
    Android发送请求到不同的Servlet,但都是一个Servlet处理
  • 原文地址:https://www.cnblogs.com/zhangsanfeng/p/8651472.html
Copyright © 2011-2022 走看看