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))
原文地址:https://www.cnblogs.com/riasky/p/3431099.html