python函数——基础

一、函数基础

  1. 函数体(功能代码块)
    • 函数是执行特定任务的代码块,通过调用函数名并传递参数(如果有的话)来执行这些任务。
  1. 函数的参数
    • 参数列表由一系列参数组成,使用逗号分隔。
    • 实参:调用函数时传递的参数。
    • 形参:函数定义时声明的参数。
    • 2.1 位置参数
      • 按照参数定义的顺序来传递值。
    • 2.2 关键参数
      • 通过指定参数名来传递值,无需遵循参数定义的顺序。
    • 2.3 默认参数
      • 在函数定义时给参数指定默认值,调用函数时如未传递该参数值,则使用默认值。默认参数必须放在非默认参数的右侧。
    • 2.4 不定长参数
      • 使用*args和**kwargs来接收任意数量的位置参数和关键字参数。
  1. 函数的返回值
    • 使用return语句从函数内部向外部返回数据。
    • 如果省略return或只有return而没有返回值,则Python默认返回None。
    • return可以放在函数中的任何位置,执行到return语句时,函数立即结束并返回结果。
    • 如果函数返回多个值,这些值将被打包成一个元组。

二、变量的作用域

  1. 变量的作用域
    • 变量起作用的代码范围称为变量的作用域。
  1. 1.5.1 局部变量
    • 在函数内部定义的变量,只在函数内部起作用。
    • 当函数执行结束后,局部变量自动删除,不能在函数外部访问。
  1. 1.5.2 全局变量
    • 变量可以同时被函数内外使用。
    • 在函数内部,如需修改全局变量的值,需使用global关键字声明。
  1. 查看变量作用域
    • 使用内置函数globals()和locals()可以查看全局变量和局部变量的字典表示。

示例代码

# 示例:函数与变量作用域  
  
def my_function(a, b=10, *args, **kwargs):  
    # 位置参数a,默认参数b,不定长参数*args和**kwargs  
    local_var = "I'm a local variable"  
    print(f"a: {a}, b: {b}, args: {args}, kwargs: {kwargs}")  
    print(f"Local variable: {local_var}")  
    return a, b, args, kwargs  # 返回多个值  
  
# 调用函数  
result = my_function(5, 20, 30, 40, key1="value1", key2="value2")  
print(result)  # 输出:(5, 20, (30, 40), {'key1': 'value1', 'key2': 'value2'})  
  
# 示例:全局变量与局部变量  
a = 99  # 全局变量  
  
def func1():  
    x, y = 2, 3  # 局部变量  
    print(x, y)  
    global b  # 声明b为全局变量  
    b = 8  
    print(locals())  # 查看局部变量  
  
func1()  
print(a)  # 输出:99  
print(b)  # 输出:8,因为b在func1中被声明为全局变量并赋值为8

函数的深入学习与应用笔记(6-10页)

6. 函数的递归调用

在函数的学习过程中,我们了解到函数不仅可以调用其他函数,还可以调用自身,这就是函数的递归调用。递归函数是一种特殊的函数,它直接或间接地调用自身。递归函数必须包含一个或多个基准条件(终止条件),以便在达到某个特定条件时停止递归调用,否则会导致无限递归,最终导致程序崩溃。

示例


def factorial(n):  
    if n == 0 or n == 1:  
        return 1  
    else:  
        return n * factorial(n-1)  
  
# 调用函数计算5的阶乘  
print(factorial(5))  # 输出:120

在这个例子中,factorial 函数用于计算一个数的阶乘。当 n 等于0或1时,函数返回1(基准条件)。否则,函数返回 n 乘以 n-1 的阶乘(递归调用)。

7. 不定长参数

在函数定义时,有时我们不确定函数会接收多少个参数。Python 提供了两种处理不定长参数的方式:*args 和 **kwargs。

  • *args:用于接收非关键字参数列表,并将它们作为元组处理。
  • **kwargs:用于接收关键字参数列表,并将它们作为字典处理。

示例


def greet_students(*args, **kwargs):  
    for name in args:  
        print(f"Hello, {name}!")  
    for key, value in kwargs.items():  
        print(f"{key} is {value}")  
  
# 调用函数  
greet_students("Alice", "Bob", age=20, grade=3)  
# 输出:  
# Hello, Alice!  
# Hello, Bob!  
# age is 20  
# grade is 3
8. 函数的默认参数

在函数定义时,可以为参数指定默认值。如果在调用函数时没有为这些参数提供值,那么将使用默认值。默认参数必须放在非默认参数的右侧。

示例:


def greet(name, greeting="Hello"):  
    print(f"{greeting}, {name}!")  
  
# 调用函数  
greet("Alice")  # 输出:Hello, Alice!  
greet("Bob", "Hi")  # 输出:Hi, Bob!
9. 函数的应用场景

函数在编程中有着广泛的应用,以下是一些常见的应用场景:

  • 代码重用:将重复的代码块封装成函数,提高代码的可读性和可维护性。
  • 模块化编程:将复杂的程序拆分成多个函数,每个函数负责实现一个特定的功能,使得程序结构更加清晰。
  • 封装数据:通过函数来封装和处理数据,隐藏数据的细节和实现方式,只暴露必要的接口给外部使用。
  • 错误处理:在函数中实现错误处理机制,如异常捕获和处理,使得程序更加健壮和可靠。
10. 函数的扩展性

在设计函数时,我们应该考虑函数的扩展性。通过使用默认参数、不定长参数等方式,我们可以为函数留下扩展的空间,方便后续添加新的功能或参数。这样做不仅可以减少修改源代码的工作量,还可以提高程序的可扩展性和可维护性。

总结:

通过学习函数的递归调用、不定长参数、默认参数以及函数的应用场景和扩展性等方面的知识,我们可以更好地理解和使用函数这一重要的编程概念。在实际开发中,我们应该充分利用函数的优势来提高代码的质量和效率。

1. 变量作用域

1.5.1 局部变量

  • 定义:在函数内部定义的普通变量,只在函数内部起作用。
  • 特点:当函数执行结束后,局部变量自动删除,不能再使用。

1.5.2 全局变量

  • 定义:变量可以同时被函数内外使用。
  • 关键字:在函数内部,若要将局部变量变为全局变量,需使用global关键字。

示例


a = 99  # 全局变量  
  
def func1():  
    a = 2  # 这里a是局部变量,若不加global,则与全局变量a无关  
    print("func1函数中的a值为%d" % a)  
  
def func2():  
    global a  # 声明a为全局变量  
    a = 8  
    print("全局变量a的值为%d" % a)  
  
func1()  # 输出func1函数中的a值  
func2()  # 输出全局变量a的修改后值  
print(a)  # 输出全局变量a的最终值

内置函数

  • globals():返回全局变量的字典。
  • locals():返回当前作用域内的局部变量的字典。
2. 函数参数

1.3.1 位置参数

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

1.3.2 关键参数

  • 定义:通过对形参赋值的方式传递参数,允许实参顺序与形参顺序不一致。

1.3.3 默认参数

  • 定义:函数定义时,参数列表中的某个形参有默认值,该参数为默认参数。
  • 注意事项:默认参数必须放在非默认参数的右侧。

1.3.4 不定长参数

  • 定义:当函数的参数数量不确定时,使用不定长参数。
  • 类型:
    • *args:接收非关键字参数,存储为元组。
    • **kwargs:接收关键字参数,存储为字典。
3. 函数嵌套

1.6 函数嵌套

  • 定义:在Python中,一个函数内部可以定义另一个函数,并在内部调用它,形成函数的嵌套调用。
4. 递归函数

1.7 递归函数

  • 定义:一个函数直接或间接地调用自身。
  • 特点:必须有明确的递归结束条件,否则会造成无限递归,导致栈溢出。



# 示例代码(部分)  
def func1():  
    x, y = 2, 3  # 局部变量  
    print(x, y)  
    global b  
    b = 8  
    print(locals())  # 输出局部变量字典  
  
func1()  
print(a)  # 输出全局变量a的值  
print(globals())  # 输出全局变量字典  
  
# 输出结果(根据示例代码简化)  
# 2 3  
# {'y': 3, 'x': 2, 'b': 8}  
# 99  
# {'...': '...', 'a': 99, 'func1': <function func1 at ...>, 'b': 8, '...': '...'}

Python中,sort_index()函数是pandas库中DataFrame数据对象的一个方法,用于根据行标签和列名称对数据进行排序。函数的语法如下:sort_index(axis=0, level=None, ascending=True, inplace=False, kind="quicksort", na_position="last", sort_remaining=True, ignore_index=False)。\[1\] 另外,pandas的DataFrame数据对象还有另一种排序方式,即根据指定某一列的值进行排序,这可以通过sort_values()函数实现。\[2\] 需要注意的是,sort_index()函数是根据行标签和列名称进行排序,而sort_values()函数是根据某一列的值进行排序。 除了pandas库中的排序函数,还可以使用其他排序算法,比如冒泡排序和选择排序。冒泡排序是一种简单的排序算法,它通过比较相邻元素的大小并交换位置来实现排序。\[3\]选择排序是另一种常见的排序算法,它通过每次选择最小的元素并将其放置在已排序部分的末尾来实现排序。 希望以上信息对您有所帮助! #### 引用[.reference_title] - *1* *2* [python函数sort_index 和 sort_values排序](https://blog.csdn.net/lss1990lss/article/details/119559207)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [蓝桥杯python组————笔记整理](https://blog.csdn.net/qq_46639904/article/details/124023255)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值