Python函数(一)

函数

概述: 为了提高编写代码效率以及代码的重用,我们将功能独立的代码块组织为一个小模块,这就是函数。

一、函数定义

def function_name(参数1, 参数2=默认值):
	# 函数逻辑代码
	return 返回值

定义两数想加,返回结果的函数:

def add2num(a, b):
return a+b

二、函数变量作用域

函数变量作用域是变量生效的作用范围,主要分为两大类: 局部变量和全局变量。

1. 局部变量:

  • 局部变量就是在函数内部定义的变量。起作用范围只在这个函数内部,在函数外部无法访问。

  • 不同函数内部中的局部变量是可以重名。

  • 函数调用时,局部变量被创建,函数调用玩后这个变量消失不在能够使用。

2. 全局变量

  • 在函数外部定义的变量叫全局变量。
  • 全局变量能否在所有的函数中进行访问。

3. 当局部变量与全局变量重名时

  • 当在函数内部中 使用 变量名 = 数据 时,此时我们认为这是定义了一个局部变量。

  • 当在函数内部出现 global 全局变量名 = 数据 时,则这里调用的是全局变量 对全局变量进行读写。

  • global 也可以对多个 全局变量在函数内部进行声明。

三、函数的入参

1. 参数顺序

调用函数时,传递的参数顺序和个数要和参数一致。

函数调用也可以通过 “键=值” 形式加以指定,这时顺序可以不和函数定义的一致。

def user_info(name, age, gender):
print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info('Rose', age=20, gender='⼥')
user_info('⼩明', gender='男', age=16)

2. 参数默认值

def printinfo(name, age=35):
# 打印任何传⼊的字符串
print("name: %s" % name)
print("age %d" % age)
# 调⽤printinfo函数
printinfo(name="miki") # 在函数执⾏过程中 age去默认值35
printinfo(age=9 ,name="miki")

3. 不定长参数

格式:

def functionname([formal_args,] *args,dfarg=val, **kwargs):
    """函数_⽂档字符串"""
    function_suite
    return [expression]
  • formal_args 表示普通的函数参数定义,

  • *args 表示所有未命名的参数都会以元组的形式存放到args参数当中。

  • **kwargs 会存放除了函数声明的参数外的所有形如 key=value 格式的参数。

  • 如果函数有缺省参数放在*args后面

def arg_test(a, b, *args, **kwargs):
    print(f"a = {a}, b = {b}")
    print(f"args type is {type(args)} ,value = {args}")
    print(f"kwargs type is {type(kwargs)} ,value = {kwargs}")

arg_test(1, 2, 5 , 60, 80, name='zhangsan', age=20)

"""
a = 1, b = 2
args type is  ,value = (5, 60, 80)
kwargs type is  ,value = {'name': 'zhangsan', 'age': 20}
"""

4. 传递元组和字典给可变参数

  • 通过给实参前面添加 “*****” 实现传递列表给可变参数,实际给元组、集合都可以这样传递。
def func(*args):
    for ele in args:
        print(ele)

l = [1,2,3]
# 传递列表给可变参数,元组,集合用法相同
func(*l)
"""
1
2
3
"""
  • 通过给实参前面添加两个"*", 实现传递字典给可变参数
def func_dict(**args):
    for k, v in args.items():
        print(f"k={k}, v={v}")

d1 = {"name" : "张三", "age" : 20}
func_dict(**d1)
"""
k=name, v=张三
k=age, v=20
"""

如果给字典前面只加一个* 则只会将字典的key解包到函数形参里。

四、函数的返回值

1. 多个数据的返回

函数一次返回多个数据时,以元组类型进行返回。

def divid(a, b):
    shang = a//b
    yushu = a % b
    return shang, yushu #默认是元组

result = divid(5, 2)
print(result) # (2, 1)
print(type(result)) #

对多个返回值也可以直接拆包获取

def divid(a, b):
    shang = a//b
    yushu = a % b
    return shang, yushu #默认是元组
r1, r2 = divid(5, 2)
print(r1) # 2
print(r2) # 1

你可能感兴趣的:(Python,python,开发语言)