• python03——函数基础


    1.1函数基础

    函数定义:

    def 函数名():

         代码块

    函数的调用:

    函数名()

    def print_info():
          print("hello")
          pass
    
    print_info()

    1.2函数参数

    def 函数名(参数列表):

    def print_info(name,age,hight)
         print('%s年龄是%d岁'%(name,age))
         print('%s体重是%dkg'%(name,hight))
    
    print_info(yangh,12,33)

    参数分类:

    必选参数(也叫位置参数)——调用时,必须给实参

    def sum(a, b):   #形式参数:不占内存地址
        sum = a + b
        print(sum)
        
    sum(20,15)   #实际参数:占用内存地址的
    sum()   ##不能这么写,因为没有给a、b传值

    默认参数(默认参数,必须放在参数列表的最后)

    def sum(a=10,b=20)
         print(a+b)
    
    sum()   #可以不赋值,会使用默认值
    sum(1)
    sum(1,2)      
    def sum(b,a=2):
    def sum(a=2,b):  ###错

    可变参数(当参数个数不确定时使用,比较灵活) *

    def getComputer(*args):
        result=0
        for item in args:
              result+=item
        print(result)
        pass
    
    getComputer(1)
    getComputer(1,2,3)

    关键字参数(可变的) ** 字典类型,key值必须是字符串

    def keyFunc(**kwargs):
         print(kwargs)
    
    dicta={''name":'yh',"age":18}
    keyFunc(**dicta)
    
    keyFunc(name='lh',age=26)

    组合使用:(可选参数得放在关键字参数之前)

    def complexF(*args,**kwargs):   ##(**kwarg,*args)会报错
        print(args) 
        print(kwargs) 
    
    complexF() #不会报错 
    complexF(1,2,3,4,name='lh') #会自动识别自动填充

    1.3.函数返回值

    return后的代码不会被执行

    def sum(a,b):
        sum=a+b
        return sum
    print(sum(10,20)) ##会返回到调用的地方
    def calc(num):
          r=0
          i=1
         while i<=num:
                r+=i
                i+=1
        return r
    
    v=calc(10)
    print(v)
    li=[]
    return li  ###返回列表
    return 1,2,3  ##返回元组
    return {"name":"yh"}  ##返回字典

    1.4.函数的嵌套调用

    在函数里调用其他函数

    def fun1():
        print("start1")
        print("……………………")
        print("end1")
        pass
    def fun2():
        print("start2")
        fun1()
        print("end2")
        pass
    fun2()

    巩固:

    1.写函数,接收n个数字,求这些参数数字的和
    2.写函数,找出传入的列表或元组的奇数位对应的元素,井返回-个新的列表
    3.写函数,检查传入字典的每一个value的长度如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。PS 字典中的value只能是字符串或列表

    2.1函数的分类:

    无参数无返回值的

    def mvprint():
        print("-" *20)

    无参数有返回值的

    def mycpu():
         return info

    有参数无返回值的

    def set(a)
         pass

    有参数有返回值的

    def cal(a,b)
        c=a+b

    2.2局部变量与全局变量

    局部变量——在函数中定义的变量,仅作用于函数内部

    全局变量—— 全局变量与局部变量重复定义时,函数里优先局部变量

    如果函数内部要对全局变量进行修改的话,使用global关键字

    global name
    name='yh'

    2.3引用

    万物皆对象,在函数的调用时,实参传递的是对象的引用。

    a=1   ###不可变类型
    def func(x)
         print(id(x))   #x的内存地址
         x=2
        print(id(x))   #x的内存地址发生变化
        print(x)  ##x为2
    
    print(id(a))   #
    func(a)        #a与开始的x是一个地址
    print(a)     #a为1
    ##可变类型
    li=[]
    def testRenc(p):
        print(id(p))
        li.append([1,2,3])
        print(p)           ###内部的数据与外部一直
     
    print(id(li))
    testRenc(li)li
    print(li)           ###外部的

    2.4匿名函数

    lambda 参数1,参数2,参数3: 执行代码语句

    缺点——只能是单个表达式,不能是一个代码块。

    ##普通函数
    def test(x,y):
         return x+y
    test(1,2)
    ###匿名函数,自带return
    test=lambda x,y:x+y
    test(1,2)

    lambda与三元计算

    if a:
       b
    else:
       c
    ##等效为
    b if a else c
    ###在lambda中
    greater=(lambda x,y:x if x>y else y)
    print(greater(3,5))
    ##也可以直接
    greater=(lambda x,y:x if x>y else y)(3,5)
    print(greater)

    2.5递归函数

    如果在一个函数内部不调用其他的函数,而是自己本身,必须设定结束的条件,不然会一直执行下去

    ###求阶乘
    def fac(n):
        if n==1:
           return 1
    else: return n*fac(n-1)
    import  os  ##文件操作模块
    def findFile(file_Path):
        listRs=os.listdir(file_Path)   ##得到该路径下所有文件夹
        for fileitem in listRs:
            full_path=os.path.join(file_Path,fileitem) ###获取完整的文件路径
            if os.path.isdir(full_path):  ##判断是否是文件夹
                findFile(full_path)   #如果是一个文件夹,再次去递归
            else:
                print(fileitem)
                pass
            pass
        else:
            return
        pass
    ##调用搜索文件对象
    findFile('D:/software')
  • 相关阅读:
    面试题:面试题归类 已看1 背1
    面试题:SSH项目总结 !=!=未看 没用
    面试题: 大公司面试 !=!=未看
    Java 重写paint绘图
    c语言中数组的定义和java中数组定义的一些区别
    Java GUI界面补充总结(不定期补充)
    JFrame 的层次结构 及 背景设置说明
    为什么内部类调用的外部变量必须是final修饰的?
    Java Calendar类的使用总结【转】
    String类为什么可以直接赋值
  • 原文地址:https://www.cnblogs.com/yilia-er/p/14078742.html
Copyright © 2020-2023  润新知