python函数,')myprint(


定义函数的一般格式:

det function():

  statements

  return a

return用于退出函数,向调用方返回一个表达式

 

函数可以不设置参数,也可以设置参数:

def function1():
    print('大湘菜')


def function2(a):
    print(a)


function1()
function2('小湘菜')

结果为:

大湘菜
小湘菜

 

python传递不可变对象,会生成一个新对象:

def change(a):
    print(id(a))
    a = 2
    print(id(a))


a = 1
print(id(a))
change(a)

结果为:

1460124477744
1460124477744
1460124478032

 

python传递可变对象,指向的是同一个对象:

def change(a):
    print(id(a))
    a.append(4)
    print(id(a))


a = [1, 2, 3]
print(id(a))
change(a)

结果为:

1874883986496
1874883986496
1874883986496

 

参数类型

1、必须参数:

def myprint(a):
    print(a)


myprint('大湘菜')

结果为:

大湘菜

 

2、关键字参数,允许调用的参数顺序和声明时不一致:

def myprint(name, age):
    print('我的名字是' + name + ',年龄是' + age + '岁。')


myprint(age='18', name='大湘菜')

结果为:

名字是大湘菜,年龄是18岁。

 

3、默认参数,如果没有参数传递,使用默认参数:

def myprint(name, age='18'):
    print('我的名字是' + name + ',年龄是' + age + '岁。')


myprint('大湘菜')
myprint('小湘菜', '81')

结果为:

我的名字是大湘菜,年龄是18岁。
我的名字是小湘菜,年龄是81岁。

 

4、不定长参数,加了*,指的是函数比初声明时使用了更多的参数,会以元组的形式存入:

def myprint(name, *otherinfo):
    print('我的名字是' + name)
    print(otherinfo)


myprint('大湘菜')
myprint('大湘菜', 1, 2, 3)

结果为:

我的名字是大湘菜
()
我的名字是大湘菜
(1, 2, 3)

 

加了**的参数会以字典的形式导入

 

声明函数时,*可以单独出现,但是*后的参数必须用关键字传入:

def myprint(name, *, age):
    print('我的名字是' + name)
    print('我的年龄是' + age)


myprint('大湘菜', age='18')

结果为:

我的名字是大湘菜
我的年龄是18

 

匿名函数

一般形式:

lamda arg1, arg2…: expression

lamda的主体是一个表达式,而不是一个代码块。lamda拥有自己的命名空间,不能访问全局命名空间的参数

info = lambda name, age: '姓名为' + name + ',年龄为' + age
print(info('大湘菜', '18'))

结果为:

姓名为大湘菜,年龄为18

 

可以把匿名函数封装到函数内:

def info():
    return lambda name, age: '姓名为' + name + ',年龄为' + age


returnFunction = info()  # 返回lamda匿名函数
print(returnFunction('大湘菜', '18'))

结果为:

姓名为大湘菜,年龄为18

 

强制位置参数

函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式

评论关闭