Python Day6 —— 函数基础

目录

一、函数基础(基中基)

1.定义函数

2.调用函数

3.函数的参数

4.函数的返回值

5.函数的说明文档

5.1定义函数的说明文档

5.2查看函数说明文档

6.函数嵌套调用

二、函数进阶

1.变量作用域

1.1局部变量

1.2全局变量

2.函数返回多个值

3.函数参数(详)

3.1位置参数

3.2关键字参数

3.3缺省参数(默认参数)

3.4不定长参数(可变参数)→ 一个组包的过程

4.拆包和交换变量值

4.1拆包

4.2交换变量值(swap)

5.引用

5.1引用当实参

可变类型VS不可变类型


一、函数基础(基中基)

函数是具有独立功能的代码块,整合到一个整体并命名,在需要的位置调用即可

代码重用 

1.定义函数

def 函数名(参数):
    代码1
    代码2
    .....

2.调用函数

函数名(参数)

3.函数的参数

# example
def add(a, b):
    result = a + b
    print(result)

add(1, 2)

4.函数的返回值

def subject():
    return 'sweet'
needs = subject()
print(needs) # sweet

5.函数的说明文档

控制台输出:函数具体细则说明

5.1定义函数的说明文档

def 函数名(参数):
    '''说明文档的位置'''
    代码
    .....

5.2查看函数说明文档

help(要查找的函数名)

6.函数嵌套调用

函数中调用函数

'''
----------
----------
----------
----------
'''
def line():
    print('-' * 10)

def lines(num):
    i = 0
    while i < num:
        line()
        i += 1

lines(4)

二、函数进阶

1.变量作用域

变量生效的范围:局部变量+全局变量

1.1局部变量

定义在函数体内部的变量,只在函数体内部生效

 作用:在函数体内部 临时保存数据,当函数调用完成时,销毁局部变量。

1.2全局变量

在函数体内、外都生效的变量

定义在函数定义前

  • 修改全局变量
a = 100 # 全局变量
print(a) # 100

def textA():
    print(a) # 100

def textB():
    a = 200
    print(a) # 200 → 此时的a是局部变量

textA()
textB()
print(a) # 100

用global关键字 —— 声明a是全局变量,即可修改

a = 100 # 全局变量
print(a) # 100

def textA():
    print(a) # 100

def textB():
    # global 关键字声明a是全局变量
    global a
    a = 200 # → 此时的全局变量a被修改
    print(a) # 200 

textA()
textB()
print(a) # 200

2.函数返回多个值

return a, b ,返回多个数据时,默认是元组类型

def return_num():
    return 1,2

print(return_num()) # (1, 2)

3.函数参数(详)

3.1位置参数

函数调用时根据函数定义的参数位置来传递参数

def id(name, age, gender):
    print(f'姓名:{name},年龄:{age},性别:{gender}')

id('Justin', 25, 'man') # 姓名:Justin,年龄:25,性别:man

注:传递和定义的参数的顺序及个数必须一致,否则报错 

3.2关键字参数

函数调用,通过“键=值”的形式指定。此时顺序不会影响赋值。

def id(name, age, gender):
    print(f'姓名:{name},年龄:{age},性别:{gender}')

id('Justin', age = 25, gender = 'man') # 姓名:Justin,年龄:25,性别:man
id('Justin', gender = 'man', age = 25) # 姓名:Justin,年龄:25,性别:man

注:如果有位置参数,位置参数必须写在关键字参数前面(未使用“键=值”形式的参数

3.3缺省参数(默认参数)

用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值

def id(name, age, gender = 'woman'):
    print(f'姓名:{name},年龄:{age},性别:{gender}')

id('Justin', 25, 'man') # 姓名:Justin,年龄:25,性别:man
id('Tom', age = 20, gender = 'man') # 姓名:Tom,年龄:20,性别:man
id('Lucy', 19) # 姓名:Lucy,年龄:19,性别:woman

注:所有位置参数必须出现在默认参数前,包括函数的定义和调用

3.4不定长参数(可变参数)→ 一个组包的过程

不确定调用时会传递多少个参数(也可能无参)。

此时用包裹(packing)位置参数,或包裹关键字参数,进行参数传递。

  • 包裹位置传递
def info(*args):
    print(args)

info() # ()
info('Lucy') # ('Lucy',)
info('Lucy', 19) # ('Lucy', 19)

 注:接收所有位置参数,所有传入的数据会被合并为一个元组(tuple)

  • 包裹关键字传递
def info(**kwargs):
    print(kwargs)

info() # {}
info(name = 'Lucy') # {'name': 'Lucy'}
info(name = 'Lucy', age = 19, gender = 'woman') # {'name': 'Lucy', 'age': 19, 'gender': 'woman'}

  注:收集所有关键字参数,返回一个字典

4.拆包和交换变量值

4.1拆包

  • 拆包:元组
def num():
    return 100, 200

num1, num2 = num()
print(num1) # 100
print(num2) # 200
  • 拆包:字典
dict = {'name' : 'Tom', 'age' : 19}
# dict有两个键值对,拆包时用两个变量接收数据
na, ag = dict
# 对字典拆包,取出的是字典的key
print(na) # name
print(ag) # age

print(dict[na]) # Tom
print(dict[ag]) # 19

4.2交换变量值(swap)

  • 法一:定义中间变量
# a=10,b=20 换成 a=20,b=10
a = 10
b = 20
c = a
a = b
b = c
print(a) # 20
print(b) # 10
  • 法二:
# a=1,b=2 换成 a=2,b=1
a, b = 1, 2 # a=1,b=2
a, b = b, a
print(a) # 2
print(b) # 1

5.引用

用id( )来判断两个变量是否为同一个值的引用

id:该块内存的地址标识

  • int类型——不可变类型
a = 1
b = a
print(a) # 1
print(b) # 1

a = 2
print(b) # 1
  • 列表——可变类型
aa = [10, 20]
bb = aa

print(bb) # [10, 20]
aa.append(30)

print(bb) # [10, 20, 30]

5.1引用当实参

不可变类型、可变类型都可以当实参

可变类型VS不可变类型

可变类型 

  • 列表
  • 字典
  • 集合

不可变类型

  • 整型
  • 浮点型
  • 字符串
  • 元组

おすすめ

転載: blog.csdn.net/sinat_56238820/article/details/122893930