成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一鍵掌握:Python 函數(shù)聲明與調(diào)用的 20 個(gè)優(yōu)秀實(shí)踐

開(kāi)發(fā)
本文我們用最接地氣的方式,揭開(kāi)Python函數(shù)的神秘面紗,掌握那些讓代碼飛起來(lái)的20個(gè)小技巧。

今天我們要一起探索的是Python世界中的一塊基石——函數(shù)!想象一下,像魔術(shù)師一樣,輕輕一揮手,復(fù)雜的任務(wù)就被封裝成簡(jiǎn)潔的命令,這就是函數(shù)的魅力。下面,讓我們用最接地氣的方式,揭開(kāi)它的神秘面紗,掌握那些讓代碼飛起來(lái)的20個(gè)小技巧。

1. 基礎(chǔ)中的基礎(chǔ):Hello, Function!

def say_hello(name="World"):
    print(f"Hello, {name}!")

say_hello("Pythonista")  # 輸出: Hello, Pythonista!

解密:def是定義函數(shù)的關(guān)鍵詞,say_hello是函數(shù)名,括號(hào)內(nèi)是參數(shù),如果沒(méi)有提供參數(shù),就用默認(rèn)值。

2. 參數(shù)傳遞:位置VS關(guān)鍵字

def greet(firstName, lastName):
    print(f"Hi, I'm {firstName} {lastName}")

greet(lastName="Smith", firstName="John")  # 明確指定參數(shù)名

小貼士:通過(guò)名字指定參數(shù),讓代碼更易讀,特別是參數(shù)多時(shí)。

3. *args 和 **kwargs:無(wú)限參數(shù)的秘密

def super_greet(*names):  # *args 收集位置參數(shù)
    for name in names:
        print(f"Hello, {name}!")
    
super_greet("Alice", "Bob", "Charlie")  # 多個(gè)名字一次性處理

def versatile_greet(**details):  # **kwargs 收集關(guān)鍵字參數(shù)
    for key, value in details.items():
        print(f"{key.title()}: {value}")

versatile_greet(age=25, city="New York")  # 關(guān)鍵信息一網(wǎng)打盡

神奇之處:*args和**kwargs讓你的函數(shù)可以接受任意數(shù)量的參數(shù),超級(jí)靈活!

4. 返回值不只是一個(gè)

def multiple_returns():
    return "Success", 200

result, status = multiple_returns()
print(result, status)  # 輸出: Success 200

多才多藝:函數(shù)可以返回多個(gè)值,其實(shí)是以元組的形式返回的。

5. 文檔字符串:讓代碼會(huì)說(shuō)話

def calculate_area(radius):
    """
    計(jì)算圓的面積。
    
    參數(shù):
    radius (float): 圓的半徑
    
    返回:
    float: 圓的面積
    """
    import math
    return math.pi * radius**2

print(calculate_area.__doc__)  # 查看文檔字符串

文明交流:良好的文檔字符串是團(tuán)隊(duì)合作的潤(rùn)滑劑,也是自我復(fù)習(xí)的好幫手。

6. 默認(rèn)參數(shù)的坑

def append_to_list(item, my_list=[]):
    my_list.append(item)
    return my_list

print(append_to_list(1))  # [1]
print(append_to_list(2))  # 注意!這里會(huì)是 [1, 2],不是預(yù)期的 [2]

警告:默認(rèn)參數(shù)在函數(shù)定義時(shí)就初始化了,多次調(diào)用時(shí)會(huì)保留之前的值,小心這個(gè)陷阱。

7. 變量作用域:誰(shuí)能訪問(wèn)我?

x = "global"

def scope_test():
    x = "local"
    print(x)  # local

scope_test()
print(x)  # global

名字游戲:在函數(shù)內(nèi)部定義的變量默認(rèn)是局部的,不會(huì)影響到外部的同名變量。

8. 非局部變量的修改

y = 10

def modify_outer():
    global y  # 告訴Python你想修改外部的y
    y = 20

modify_outer()
print(y)  # 輸出: 20

特權(quán)操作:使用global關(guān)鍵字可以讓函數(shù)內(nèi)部修改全局變量,但要謹(jǐn)慎使用。

9. 閉包:函數(shù)內(nèi)的函數(shù)

def counter():
    count = 0
    def increment():
        nonlocal count
        count += 1
        return count
    return increment

my_counter = counter()
print(my_counter())  # 1
print(my_counter())  # 2

內(nèi)外有別:閉包允許內(nèi)部函數(shù)訪問(wèn)并修改外部函數(shù)的變量,而外部函數(shù)返回的是內(nèi)部函數(shù)的引用。

10. 裝飾器:給函數(shù)穿上花衣

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

裝飾生活,裝飾函數(shù):裝飾器是Python的一大特色,它可以在不修改原函數(shù)代碼的情況下增加新功能。

高級(jí)使用場(chǎng)景

11. 遞歸:自己調(diào)用自己的藝術(shù)

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)

print(factorial(5))  # 輸出: 120

無(wú)限循環(huán)的智慧:遞歸是解決某些問(wèn)題的強(qiáng)大工具,但要注意避免無(wú)限循環(huán),確保有一個(gè)清晰的終止條件。

12. 匿名函數(shù)lambda:簡(jiǎn)潔之美

double = lambda x: x * 2
print(double(5))  # 輸出: 10

squared = lambda x: x**2
numbers = [1, 2, 3]
print(list(map(squared, numbers)))  # 輸出: [1, 4, 9]

一閃即逝的美:lambda函數(shù)適合簡(jiǎn)單的操作,它們無(wú)需定義即可使用,非常適合用在高階函數(shù)中。

13. map()函數(shù):批量操作的藝術(shù)

def square(n):
    return n*n

numbers = [1, 2, 3, 4]
squared_numbers = list(map(square, numbers))
print(squared_numbers)  # 輸出: [1, 4, 9, 16]

# 或者用lambda簡(jiǎn)化
simplified = list(map(lambda x: x*x, numbers))
print(simplified)  # 同上

批量處理好幫手:map函數(shù)對(duì)序列的每個(gè)元素應(yīng)用指定函數(shù),返回一個(gè)迭代器對(duì)象,通常轉(zhuǎn)換為列表使用。

14. filter()函數(shù):篩選高手

def is_even(n):
    return n % 2 == 0

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(is_even, numbers))
print(even_numbers)  # 輸出: [2, 4, 6]

# 簡(jiǎn)化版
even_with_lambda = list(filter(lambda x: x % 2 == 0, numbers))
print(even_with_lambda)  # 同上

只選對(duì)的:filter函數(shù)根據(jù)提供的函數(shù)來(lái)篩選序列中的元素,返回一個(gè)迭代器,同樣常用list轉(zhuǎn)換。

15. reduce()函數(shù):累積計(jì)算的秘密武器

from functools import reduce

def accumulator(acc, item):
    return acc + item

numbers = [1, 2, 3, 4]
sum_of_numbers = reduce(accumulator, numbers, 0)
print(sum_of_numbers)  # 輸出: 10

# 或用lambda簡(jiǎn)化
sum_with_lambda = reduce(lambda acc, item: acc + item, numbers, 0)
print(sum_with_lambda)  # 同上

累積力量:reduce將一個(gè)函數(shù)應(yīng)用于序列的所有元素,累積結(jié)果,非常適合求和、乘積等操作。

16. 偏函數(shù)partial:定制化的便捷

from functools import partial

def power(base, exponent):
    return base ** exponent

square = partial(power, exponent=2)
print(square(5))  # 輸出: 25

cube = partial(power, exponent=3)
print(cube(3))  # 輸出: 27

定制你的函數(shù):偏函數(shù)可以固定原函數(shù)的部分參數(shù),生成新的函數(shù),非常適用于需要多次調(diào)用且參數(shù)變化不大的場(chǎng)景。

17. 遞歸優(yōu)化與尾遞歸

# 注意:Python標(biāo)準(zhǔn)解釋器不直接支持尾遞歸優(yōu)化
def factorial_tail(n, accumulator=1):
    if n == 1:
        return accumulator
    else:
        return factorial_tail(n-1, n*accumulator)

print(factorial_tail(5))  # 輸出: 120

尾聲:雖然Python沒(méi)有內(nèi)置的尾遞歸優(yōu)化,理解尾遞歸的概念對(duì)理解函數(shù)調(diào)用棧很有幫助。

18. 閉包進(jìn)階:數(shù)據(jù)封裝

def counter_maker():
    count = 0
    def increment():
        nonlocal count
        count += 1
        return count
    return increment

counter1 = counter_maker()
counter2 = counter_maker()

print(counter1(), counter1())  # 輸出: 1 2
print(counter2(), counter2())  # 輸出: 1 2

工廠模式:閉包可以用來(lái)創(chuàng)建具有獨(dú)立狀態(tài)的函數(shù),類(lèi)似于面向?qū)ο笾械膶?shí)例。

19. 高階函數(shù):函數(shù)的函數(shù)

def apply_operation(func, a, b):
    return func(a, b)

add = lambda x, y: x + y
subtract = lambda x, y: x - y

print(apply_operation(add, 5, 3))  # 輸出: 8
print(apply_operation(subtract, 5, 3))  # 輸出: 2

函數(shù)的魔力:高階函數(shù)可以接受函數(shù)作為參數(shù)或返回函數(shù),這是函數(shù)式編程的核心概念。

20. 裝飾器進(jìn)階:帶參數(shù)的裝飾器

def repeat(n):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(n):
                func(*args, **kwargs)
        return wrapper
    return decorator

@repeat(3)
def say_hello():
    print("Hello!")

say_hello()  # 輸出: Hello! Hello! Hello!

裝飾器的新維度:帶參數(shù)的裝飾器讓裝飾器本身也變得靈活,可以根據(jù)需要調(diào)整行為。

至此,我們探索了Python函數(shù)從基礎(chǔ)到進(jìn)階的20個(gè)最佳實(shí)踐,每一個(gè)點(diǎn)都是打開(kāi)新視野的鑰匙。

責(zé)任編輯:趙寧寧 來(lái)源: 手把手PythonAI編程
相關(guān)推薦

2023-03-16 08:01:56

TypeScript開(kāi)源編程語(yǔ)言

2014-04-16 10:54:45

Javascript遞歸調(diào)用

2023-03-15 15:54:36

Java代碼

2024-06-12 13:57:00

2024-05-20 10:00:00

代碼Python編程

2024-04-11 13:57:19

MySQLHelm數(shù)據(jù)庫(kù)

2015-02-09 15:25:52

換膚

2024-11-21 17:22:40

2019-01-17 10:25:56

Python編程語(yǔ)言程序員

2024-01-29 00:20:00

GolangGo代碼

2021-06-25 14:50:21

DevSecOps安全 DevOps

2020-10-27 06:56:53

IoT產(chǎn)品實(shí)踐

2024-04-18 09:20:43

PostgreSQL關(guān)系型數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)管理系統(tǒng)

2022-02-28 15:56:14

零信任企業(yè)

2020-11-24 10:32:16

CIO首席信息官工具

2022-10-10 14:53:00

云安全云計(jì)算云平臺(tái)

2021-03-01 19:24:13

Kubernetes備份容器

2025-01-26 08:30:00

Python代碼編程

2025-01-06 08:00:00

Python代碼編程

2018-08-30 09:00:00

開(kāi)源Apache Kafk數(shù)據(jù)流
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久久精品一区 | 羞羞视频网站免费观看 | 国产精品久久久久久久久久久久 | 国产精品激情小视频 | 久久精品99国产精品 | 色一级片| 青草久久免费视频 | 亚洲国产一区二区视频 | 成人免费一级 | a毛片视频网站 | 国产一区三区在线 | 91精品一区二区三区久久久久久 | 国产99在线 | 欧美 | 粉嫩av在线 | 狠狠干2020 | 久久精品视频免费看 | 色婷婷久久| 在线播放一区 | 特级毛片www| 日韩欧美国产一区二区三区 | 五月婷婷色 | 午夜精品一区二区三区在线 | 精品免费视频 | 中文字幕11页| 久久免费视频1 | 日韩久草| 操操日 | 狠狠的干狠狠的操 | www国产成人免费观看视频,深夜成人网 | 午夜视频免费在线观看 | 亚洲精精品 | 午夜三级在线观看 | 野狼在线社区2017入口 | 久草资源在线视频 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 伊人精品在线 | 蜜桃一区二区三区 | 日韩国产黄色片 | 中文字幕久久精品 | 一级毛片色一级 | 精品欧美一区二区在线观看视频 |