python自定义函数中必须要携带返回值_Python入门之十:自定义函数

本文介绍了Python自定义函数的基本概念,包括函数定义、参数传递和返回值。通过实例详细解释了如何定义函数,以及Python中参数传递的规则,对于不可变类型参数,函数内部修改不会影响外部;对于可变类型参数,如列表和字典,函数内部的修改会影响到外部。还探讨了关键字参数、可变数量参数的用法,并简要介绍了匿名函数`lambda`。最后,讨论了`return`关键字在函数中的作用以及返回值的处理。
摘要由CSDN通过智能技术生成

Python入门之十:自定义函数

2年前

阅读 5675

评论 0

喜欢 0

### 一、函数的定义

语法如下,依赖上下文缩进对齐:

```

def 函数名(参数列表):

函数体

```

例如下面的代码:

```python

#!/usr/bin/env

def demo(num):

print(num)

demo('小黄牛真帅!')

```

### 二、参数的传递

在 python 中,类型属于对象,变量是没有类型的,`string`, `tuple`, 和 `number` 是不可更改的对象,而 `list`,`dict` 等则是可以修改的对象。

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

python 函数的参数传递:

1、不可变类型:如整数、字符串、元组。

例如`fun(a)`,传递的只是`a`的值,没有影响`a`对象本身。

比如在`fun(a)`内部修改 `a` 的值,只是修改另一个复制的对象,不会影响函数外部 `a` 变量本身,就是通常说的作用域。

2、可变类型:如列表,字典。

如 `fun(la)`,则是将 `la` 真正的传过去,修改后`fun()`外部的`la`也会受影响。

传不可变对象的例子:

```python

#!/usr/bin/env

#定义函数

def demo(b):

b = 100

print(b)

b = 1

#调用函数

demo(b)

print(b)

```

运行上面的代码后,我们可以从结果中看出函数外部`b`变量的值并没有发生变化。

注意:上面的`b`变量为必传参数,如果我们直接调用`demo()`函数就会报错

Python也允许给函数变量传递默认参数,例如这样创建函数:`def demo(b=200)`

传可变对象的例子:

```python

#!/usr/bin/env

#定义函数

def demo( list ):

list[0] = 100

print(list)

list = [1,2,3,4]

#调用函数

demo(list)

print(list)

```

从结果可以看出,在调用过函数之后,函数外部的`list`中的值也发生了改变。

### 三、可变参数位置

Python中允许使用关键字参数调用函数,在调用时参数的顺序与声明时可以不一致,用法如下:

```python

#!/usr/bin/env

# 定义函数

def demo(name,phone):

print(name)

print(phone)

# 调用函数

demo(phone="110", name="小黄牛")

```

### 四、传递不定个数的参数

当我们创建一个函数的时候,需要传入的参数个数未知,这时候应该怎么办?

Python中给我们提供了两种方法:

#### 语法一:

```

def 函数名(*var):

函数体

```

加了`*`星号的参数会以元组(`tuple`)的形式导入,存放所有未命名的变量参数,

例如:

```python

#!/usr/bin/env

# 定义函数

def demo(*var):

print(var)

#调用函数

demo(1,2,3)

```

如果在函数调用时没有指定参数,它就是一个空元组。

可以不向函数传递未命名的变量。

#### 语法二:

```

def 函数名(**var):

函数体

```

加了两个`**`星号的参数会以字典的形式导入。

例如:

```python

#!/usr/bin/env

# 定义函数

def demo(**var):

print(var)

#调用函数

demo(a=1,b=2,c=3)

```

输出结果如下:

```

{'a': 1, 'b': 2, 'c': 3}

```

### 五、匿名函数

Python中也支持匿名函数的创建,但没有闭包的概念,所以作用不大,只能处理简单的逻辑。

python 使用 `lambda` 关键字来创建匿名函数:

1、`lambda` 只是一个表达式,函数体比 `def` 简单很多。

2、`lambda` 的主体是一个表达式,而不是一个代码块。仅仅能在`lambda`表达式中封装有限的逻辑进去。

3、`lambda` 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

语法如下:

`lambda [变量,变量] : 函数体`

示例:

```python

#!/usr/bin/env

#定义匿名函数

sum = lambda a,b : print(a+b)

#调用函数

sum(2,2)

```

注意:匿名函数的函数体,只能写在同一行代码中,也无法使用`\`符号进行多行划分。

### 六、返回值

与其他编程语言一样,Python中同样是使用`return`关键字退出函数,选择性地向调用方返回一个表达式。

不带参数值的`return`语句返回`None`,这里需要注意,首字母`N`是大写的。

在Python中没有`NULL`的概念,空则是`None`字符串,我们要判断是不是为`None`可以直接使用`if`判断,例如这样:`if a== None`

示例代码:

```python

#!/usr/bin/env

#定义函数

def demo(a,b):

sum = a + b

return sum

#调用函数

total = demo(5,10)

print(total)

```

© 著作权归作者所有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值