栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

学习 Python 之 函数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习 Python 之 函数

学习 Python 之 函数
    • python函数
      • 1. 函数的作用和特性
      • 2. 函数的定义
      • 3. 函数返回值
        • (1). 返回多个值
        • (2). 接收返回值
        • (3). 序列解包
      • 4. 函数参数
          • (1). 必须参数
          • (2). 关键字参数
          • (3). 默认参数
            • 默认参数必须在必须参数的左边
          • (4). 可变参数
          • (5). 关键字可变参数
      • 5. 变量作用域
        • (1). 作用域
        • (2). global关键字

python函数 1. 函数的作用和特性
  1. 功能性
  2. 隐藏细节
  3. 避免编写重复代码
  4. 组织代码
2. 函数的定义
def function_name(parameter_list):
    pass

parameter_list是参数列表, 可有可无

例子: 定义一个add()函数实现两个数的相加, 返回相加后的结果

def add(x, y):
    return x + y
3. 函数返回值

使用return关键字让函数有返回值, 如果函数没有返回值, 返回值为None

(1). 返回多个值
def fun(x, y):
    return x, y

当返回值大于一个时, 返回结果是一个元组

def fun(x, y):
    return x, y
    
print(fun(1, 2))

结果为:

(1, 2)

(2). 接收返回值

第一种接收方法和使用方法(不推荐)

def fun(x, y):
    return x, y
    
result = fun(1, 2)
print(result[0], result[1])

第二种接收方法和使用方法(推荐)

def fun(x, y):
    return x, y
    
a, b = fun(1, 2)
print(a, b)

这种方法也成为序列解包

(3). 序列解包

将一个序列的值逐一把赋给其他变量

序列: 字符串、列表、元组、字典、集合

a, b, c = [1, True, 'a']
print(a, b, c) 

1, True, ‘a’

当函数有多个返回值是, 将返回一个元组, 元组是序列, 所以可以使用序列解包

a, b, c = 'abc'
print(a, b, c)

a b c

快速赋值

a, b, c = 1, 2, None
print(a, b, c)

1, 2, None

快速复制的原理也是序列解包

a = 1, 2, None
print(type(a))

4. 函数参数
参数类型例子
必须参数fun(1, 2)
关键字参数fun(y = 1, x = 2)
默认参数fun(1)
可变参数def fun(*parmeter):
关键字可变参数def fun(**parmeter):
(1). 必须参数

函数中规定了几个参数, 调用该函数时就必须传递几个参数

def fun(x, y):
    return x, y
    
a, b = fun(1, 2)
print(a, b)

fun函数规定了两个参数, 调用时必须传递两个参数

(2). 关键字参数

默认情况下, 传入的参数是从左向右依次赋值的

def fun(x, y):
    return x, y

对于fun函数, 调用时fun(1, 2), 则x=1, y=2

关键字参数用来指定参数的值

def fun(x, y):
    return x, y
    
a, b = fun(y = 1, x = 2)

此时, x的值被指定为2, y的值被指定为1

(3). 默认参数

函数参数不传时有一个默认值

def fun(x, y = 2):
    return x, y
    
a, b = fun(1)

上述例子, y的值没有传入, 就为默认值

默认参数必须在必须参数的左边

下面这个例子是错误的

def fun(x, y = 2, z):
    return x, y, z
    
fun(1, 3)

正确写法

def fun(x, y, z = 2):
    return x, y, z
    
fun(1, 3)
(4). 可变参数

参数前面使用*表示该参数是可变参数, 可变参数表示, 调用该函数时, 传入的参数可以是不确定个数的

定义一个可变参数函数

def fun(*parament):
    print(parament)

fun(1, 2, 3, 4)

输出

(1, 2, 3, 4)

参数列表会转换成元组

如果传入参数为元组, 结果就会变成元组的元组

fun((1, 2, 3, 4))

((1, 2, 3, 4), )

如果我想传入元组, 进入函数不让它变成元组的元组, 怎么办呢?

使用*

def fun(*parament):
    print(parament)

fun((1, 2, 3, 4))
fun(*(1, 2, 3, 4))

结果为, 使用*后, 参数没有被转换成元组的元组

((1, 2, 3, 4),)

(1, 2, 3, 4)

(5). 关键字可变参数

如果要指定参数的名字和值, 仅使用可变参数是不行的

def fun(*para):
    print(para)

fun(a = 1, b = 2)

这样会出现错误

Traceback (most recent call last):
  File "C:UsersAdministratorDesktoppythondemo.py", line 8, in 
    fun(a = 1, b = 2)
TypeError: fun() got an unexpected keyword argument 'a'

那么如何实现呢, 使用**

def fun(**para):
    print(para)

fun(a = 1, b = 2)

结果

{‘a’: 1, ‘b’: 2}

但是结果变成了字典, 所以可变关键字参数列表会被转换成字典

使用**

def fun(**para):
    for k, v in para.items():
        print(k, '-', v)

a = {
    '1': 'one',
    '2': 'two'
}

fun(**a)

1 - one

2 - two

5. 变量作用域 (1). 作用域
作用域类型说明
全局作用域在函数外部的作用域, 变量可以在整个应用程序中使用
函数作用域局部变量, 变量只能在函数内部使用

for循环外部可以引入for循环内部的变量, 因为python没有块级作用域

def funOne():
    c = 2
    print('one', id(c))
    def funTwo():
        c = 3
        print('two', id(c))
        print(c)
    funTwo()

funOne()

结果

one 2571382423824

two 2571382423856

3

(2). global关键字

用于将局部变量变成全局变量

def func():
    global c
    c = 2

func()
print(c)

2

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/916306.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号