函数定义:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
  • 函数内容以冒号起始,并且缩进
  • 函数以return 结束,若无return 返回non

示例:

def myFun():
    print('hello world')  

函数调用: 直接调用函数名 : myFun()

参数传递:

python 函数的参数传递:

  • 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a,没有影响a对象本身。比如在fun(a)内部修改 a的值,只是修改另一个复制的对象,不会影响 a 本身。
  • 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

示例:list类型

def changeList(list):
    list.append(99)
    print("函数内的值为:",list)
    return
lis=[1,2,3,4]
changeList(lis)
print("函数外的值为:",lis)
#函数内的值为: [1, 2, 3, 4, 99]
#函数外的值为: [1, 2, 3, 4, 99]

我们看到,在函数外部的lis数据也被改变了,这就是可变类型的效果

又一示例:

def printInfo(name,age):
    print("姓名:",name)
    print("年龄:",age)
printInfo('houger',19)
#函数传递参数,指定参数名时,无顺序要求
printInfo(age=20,name="ihouger")

不定长参数( * ):

def argFun(arg,*params):
    print(arg)
    print(params)
    print(type(params))
argFun('abc',2,3,4)
#abc
#(2, 3, 4)
#<class 'tuple'>

上述代码params类型为元祖

不定长参数(两个 * ):

参数可以带两个*,基本语法如下:

def fname(arg,**vardict):
    print(arg)
    print(vardict)
    print(type(vardict))
fname(1,a=2,b=3)
#1
#{'a': 2, 'b': 3}
#<class 'dict'>

注:加了两个星号** 的参数会以字典的形式传入。

匿名函数的使用 lambda
格式: lambda [args..] : 表达式

例 :

a = lambda x,y:x*y*y
a(3,4)
# 48

x,y 为参数,冒号之后 的为执行表达式;

当然匿名函数参数也是可有,可无,如下:

b= lambda :3**3
b()
#27

我们省略了冒号前面的参数,直接书写冒号后面的表达式,求 3立方。


Leave Your Comment

电子邮件地址不会被公开。 必填项已用*标注