函数的变量,返回值,多类型传值和冗余参数,函数的递归调用

本文详细介绍了函数的参数类型,包括位置参数、关键字参数、默认参数和可变长参数。还探讨了局部变量和全局变量的区别,以及如何使用`global`声明全局变量。接着,讨论了函数的返回值,指出默认返回`None`。在多类型传值和冗余参数部分,强调了字典传参时key的重要性,并展示了处理多余参数的方法。最后,讲解了函数的递归调用,指出递归调用需要注意的两点:存在退出条件和参数向默认结果收敛。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数的参数

形式参数和实际参数

1、 在定义函数时,函数名后面括号中的变量名称叫做“形式参数”,或者称为“形参”
2、 在调用函数时,函数名后面括号中的变量名称叫做“实际参数”,或者称为“实参”

参数分类

(以下四点归纳引用自老师的笔记https://mp.youkuaiyun.com/mdeditor#)

1:位置参数

def foo(x,y,z):

  print (x,y,z)

foo(1,2,3)

2:关键字参数

def foo(x,y,z):

  print (x,y,z)

foo(y=2,x=1,z=3)  -->在调用时体现

**1:关键字实参必须在位置实参后面**
# 2: 不能重复对一个形参数传值
# foo(1,z=3,y=2) #正确
# foo(x=1,2,z=3) #错误**

3:默认参数

def foo(x,y,z=3):

  print (x,y,z)

  foo(1,y=2)

或者 foo(1,2)

#默认参数必须跟在非默认参数后

#默认参数的值通常定义成不可变类型

#默认参数在定义阶段就已经赋值了,而且只在定义阶段赋值一次

4:可变长参数
*args(一个星) 会把溢出的按位置定义的实参都接收,以元组的形式赋值给args

kwargs(俩个星) 会把溢出的按关键字定义的实参都接收,以字典的形式赋值给kwargs

def foo(x,y,*suibian):    -->*后面随便写,最好写为args
  print (x,y)
  print (suibian)
foo(1,2,3,4,5,6,7,1)

变长参数会把里面的内容放到 一个元祖中

上面的调用结果 和这样写相同:

foo(1,2*[3,4,5,6,7,1])  -->在调用的时候使用* 会把后面的内容分别放入suibian 中

可以使用列表、集合、元祖、字典, 但是字典只会将key 提取出来

foo(1,2,*{'a':3,'b':4,'c':5})
如果想要 字典值:如下
foo(1,2,*{'a':3,'b':4,'c':5}.values())

如果想要k,v
foo(1,2,*{'a':3,'b':4,'c':5}.items())
处理结果:
1 2
(('c', 5), ('b', 4), ('a', 3))
kwargs

def foo(x,y,**kwargs):
    # (x,y)print )
    print (x,y)
    print (kwargs)
foo(1,2,a=3,b=4,c=5)

在传递的时候 kwargs 的需要 以k=v 的形式传递 因为 kwargs 是以字典形式显示

函数的变量

局部变量和全局变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
total = 0; # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
   #返回2个参数的和."
   total = arg1 + arg2; # total在这里是局部变量.
   print "函数内是局部变量 : ", total
   return total;
 
#调用sum函数
sum( 10, 20 );
print "函数外是全局变量 : ", total

以上实例输出结果:

函数内是局部变量 :  30
函数外是全局变量 :  0

global 声明函数中的变量为全局变量,就可以对在函数外部进行使用

函数的返回值

函数被调用后会返回一个指定的值,函数调用后默认返回none

return语句[表达式]退出函数,选择性地向调用方返回一个表达式。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 可写函数说明
def sum( arg1, arg2 ):
   # 返回2个参数的和."
   total = arg1 + arg2
   print "函数内 : ", total
   return total;
 
# 调用sum函数
total = sum( 10, 20 );

返回值可以是任意类型,return执行后,函数终止。
return与print,print 一般常用于测试,定义函数的目的,就是为了调用函数,其实主要也是为了能使用函数的返回值

多类型传值和冗余参数

   * arg元组
   **字典

*后就可以直接调用,且加*的参数需要放在最后面
传值时,如果是字典,字典的key要和形参的名字一致

冗余参数

处理多余参数(接收多余参数)

def func(x,*args,**kwargs):

定义了x命名参数,和两个多类型参数,作为冗余参数
默认情况下至少传递一个命名参数,如果传的参数多的话,则存到args中(以元组的形式),如果传递的是字典,或者变量的默认(例x=1)值等(以字典的形式存储)

函数的递归调用

递归调用顾名思义即在函数内部调用函数(自己调用自己),通常用它来计算阶乘,累加等

注意:
  - 必须有最后的默认结果
    if n ==0,(不能一直调用自己,如果没有可能会造成死循环)
  - 递归参数必须向默认的结果收敛
    func(n-1)
举例

计算1到100的和
#!/usr/bin/env python
 
def func(n):
  sum = 0
  if n == 0:
    return 0
  else:
    return n + func(n-1)
 
print func(100)

举例

#!/usr/bin/env python
 
import os
import sys
 
def print_file(path):
  lsdir = os.listdir(path)
  files = [ i for i in lsdir if os.path.isfile(os.path.join(path,i)) ]
  dicts = [ i for i in lsdir if os.path.isdir(os.path.join(path,i)) ]
  if files:
    for i in files:
      print os.path.join(path,i)
  if dicts:
    for f in dicts:
      print_file(os.path.join(path,f))
      print_file(sys.argv[1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值