• Python中的函数


          Python中,函数返回值通过return语句,但是返回类型不像C++那样需要定义其类型;同样输入形参只需要写名字就行了,不需要定义类型。在Python中,函数内为参数赋值不会改变外部任何变量(按值传递)。在Python里面的作用域概念,包括局部作用域和全局作用域。

    (1)要改变值有两种方式:一是通过返回值;二是将要改变的值封装到列表中。

    #方法1
    foo = 10
    def inc(x):return x + 1;#作为返回值返回
    foo1 = inc(foo)
    print(foo)
    11
    
    #方法2
    def inc(x):x[0]+=1
    foo=[10] #将值放到列表中
    inc(foo)
    print (foo)
    [11]
    
    #可以改变列表里面的内容,且能被保存下来
    def initDict(storage): 
        storage.append("seu")
        storage.append('njust')
        return
    nameDict = []
    initDict(nameDict)
    print (nameDict)
    ['seu', 'njust']
    
    #但是如果改变列表变量本身不行
    def initDict(storage): 
        storage = [] #该句话改变了storage,所以导致最后的输出结果为[]
        storage.append("seu")
        storage.append('njust')
        return
    nameDict = []
    initDict(nameDict)
    print (nameDict)
    []

    (2)关键字参数和默认值

          使用参数名提供的参数叫做关键字参数,主要作用是明确每个参数的作用,使调用者更清楚。下面#2,#3用了关键字参数

    def hello(greet,name):
        print ('%s,%s!' %(greet,name))
        return
    hello('Hello','World')#1 这三个条语句完全一样
    hello(greet='Hello',name='World') #2 关键字参数,结果和上一样
    hello(name='World',greet='Hello')#3 关键字参数,结果和上一样

           同样,还可以给参数赋默认值,与关键字参数结合使用。

    #给函数默认参数
    def hello_2(name='world',greet='Hello'):
        print ('%s,%s!' %(greet,name))
        return
    hello_2()
    hello_2('world')
    hello_2('wrold','Hello')
    hello_2(greet='Hello')#这样也可以

    (3)收集参数

          参数前加一个星号表示搜集其余的位置参数。如果不提供任何供搜集的元素,搜集参数将为空元组

    def print_para(title,*para):
        print (title+':')
        print (para)
        return
    print_para('params',2,3,4) #后面的几个参数被para所搜集
    params:
    (2, 3, 4)

           “**”表示处理关键字参数的“搜集”操作,搜集成字典

    #范例1
    def print_para(**paras):
        print (paras)
        return
    print_para(x='dfs',y=2,z=3)
    {'y': 2, 'x': 'dfs', 'z': 3}
    
    #范例2
    def print_para(x,y,z,*pos,**paras):
        print (x,y,z)
        print (pos)
        print (paras)
        return
    print_para(1,2,3,4,6,7,foo=1,bar='lsj')
    1 2 3
    (4, 6, 7)
    {'foo': 1, 'bar': 'lsj'}

    (4)反转过程

           不是搜集参数,而是分配它们在“另一端”。使用*运算符。

    #元组反转过程
    def add(x,y):return x+y
    para = (1,2)
    print (add(*para))#反转过程
    3
    
    #字典的反转过程
    def Hello(name,greet):
        print (name+',',greet)
        return
    params = {'name': 'lsj','greet':'Hello'}
    Hello(**params) #反转过程
    lsj, Hello

    (5)递归问题

           函数自身调用自身。

    def calSum(i):
        if(i==0):
            return 0
        else:
            return i + calSum(i-1)
    for i in range(1,20):
        print (calSum(i))
  • 相关阅读:
    idea编译eclipse项目时修改java代码后运行不生效
    IDEAL启动项目的时候报java.lang.NoClassDefFoundError: javax/servlet/Filter错误
    springboot项目运行报错Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean
    Error:(5, 25) java: 程序包javax.servlet.jsp不存在
    未载入,因为它的 MIME 类型 "text/html" 不是 "text/css"
    Win10下PHP加载php8_module报错“Can‘t locate API module structure `php8_module‘ in file XXX“解决方法供参考
    apache启动服务报错ServerRoot must be a valid directory
    如何从Apache官网下载windows版apache服务器
    解决request.getServletContext()方法报红问题
    [Cloud DA] Serverless Framework with AWS
  • 原文地址:https://www.cnblogs.com/riasky/p/3431099.html
Copyright © 2020-2023  润新知