首頁  >  文章  >  後端開發  >  Python常用內建函數及用法

Python常用內建函數及用法

PHPz
PHPz轉載
2023-04-24 08:13:061883瀏覽

一、abs()

abs() 用來傳回一個數的絕對值。

在python中,對於內建型別的數值型別(int、float或complex),可以直接使用abs()函數來求其絕對值。但對於自訂類型的數值類型,如果想要使用abs()函數求其絕對值,就需要實作__abs__()方法。

abs()方法的實作方式也很簡單,只需要在類別中定義一個名稱為__abs__()的方法,並在其中傳回該數的絕對值即可。例如:

class MyNumber:
    def __init__(self, num):
        self.num = num
    
    def __abs__(self):
        return abs(self.num)

n = MyNumber(-3)
print(abs(n))    # 输出结果为:3

在上述程式碼中,我們定義了一個名為MyNumber的類,其中包含一個num屬性,並實作了__abs__( )方法。在__abs__()方法中,我們呼叫了abs()函數來求該數的絕對值。

最後,我們實例化了一個MyNumber對象,傳入了一個負數作為參數。然後,我們呼叫了abs()函數來計算MyNumber物件的絕對值,得到了3這個結果。

二、aiter()函數

aiter()asyncio 函式庫中的一個函數,用來產生非同步迭代器物件。 Python3.10 新版本功能。

非同步迭代器物件是一種可以非同步遍歷的迭代器物件。透過非同步迭代器,我們可以逐一非同步取得迭代器中的元素。

aiter() 接受一個可迭代物件作為參數,並傳回一個非同步迭代器物件。非同步迭代器物件是 AsyncIterator 類別的實例。

以下是aiter() 函數的基本語法:

asyncio.aiter(iterable, /)

其中,iterable 是一個可迭代對象,它可以是任何支援異步迭代的對象,如非同步生成器、非同步列表等。

使用非同步迭代器時,我們需要使用async for 語句進行非同步迭代,如下所示:

async def my_func():
    async for i in my_async_iterable:
        print(i)

在上面的範例中,my_async_iterable 可以是透過aiter() 函數產生的非同步迭代器對象,也可以是其它支援非同步迭代的對象。

需要注意的是,在非同步迭代器遍歷完之後,我們需要明確關閉該非同步迭代器對象,以釋放對應的資源,如下所示:

async def my_func():
    async with aiter(my_async_iterable) as iter_obj:
        async for i in iter_obj:
            print(i)

透過async with 語句建立一個非同步上下文管理器,可以自動關閉該非同步迭代器。這種方式比較簡潔,建議使用。

三、all()函數

用來判斷一個可迭代物件中的所有元素是否都為True。

語法格式如下:

all(iterable)

其中,iterable為可迭代對象,如列表、元組、集合、字串等。

傳回結果為布林值,如果iterable中的所有元素都為True,則傳回True,否則傳回False。如果iterable為空,則傳回True。

範例:

>>> all([True, True, False, True])
False

>>> all([1, 2, 3, 4])
True

>>> all(('a', 'b', 'c'))
True

>>> all(['', [], {}])
False

以上範例中,第一個清單中有一個元素為False,因此傳回False。第二個列表中所有元素都為非零數值,因此傳回True。元組、列表都可以作為可迭代物件傳遞給all()函數。最後一個列表中都是空序列或字典,因此傳回False。注意,空列表、元組、集合、字串等都會傳回True。

注意事項:

  • 如果給定的可迭代物件中存在元素為False、0、''、None等等假值,all()函數也會回傳False。

  • 可以使用any()函數判斷可迭代物件中是否存在至少一個為True的元素。

四、anext()

anext()是asyncio模組中的函數,用於從非同步迭代器中取得下一個值。如果非同步迭代器已經結束,anext()將引發StopAsyncIteration異常。 Python3.10 新版本功能。

在asyncio中,非同步迭代器(async iterator)定義為實作了__aiter__()和__anext__()方法的物件。 aiter()方法傳回迭代器物件自身,anext()方法傳回下一個值,如果沒有更多的值可用,則引發StopAsyncIteration異常。

以下是使用anext()函數的範例:

import asyncio
async def async_generator(): yield 1 yield 2 yield 3
async def main( ): ag = async_generator() try: while True:

        value = await asyncio.anext(ag)
        print(value)
except StopAsyncIteration:
    pass

asyncio.run(main())

上述程式碼建立了一個非同步產生器async_generator(),該生成器逐一返回1、2、3。在main()函數中,我們使用anext()函數從非同步產生器中取得下一個值,直到StopAsyncIteration異常被引發。在這個範例中,我們使用asyncio.run()函數來執行main()協程,該函數使用了Python3.7及以上版本的Python。

五、any()函數

用來判斷一個可迭代物件中是否存在至少一個元素滿足條件。此函數傳回一個布林值,如果存在一個元素滿足條件,則傳回True,否則傳回False。

下面是any()函數的語法格式:

any(iterable)

其中iterable是一个可迭代对象,例如列表、元组、集合或字典的键等等。

any()函数的工作原理如下:

  • 遍历可迭代对象中的所有元素。

  • 对于每个元素,将其作为参数传递给判断函数,判断函数返回True或False。

  • 如果存在任意一个元素使得判断函数返回True,则返回True,并停止遍历,否则返回False。

下面是一个示例,演示如何使用any()函数来判断一个列表中是否存在奇数:

lst = [2, 4, 6, 8, 9, 10]
result = any(x % 2 == 1 for x in lst)
print(result)

输出:

True

在上面的示例中,我们使用生成器表达式来表达“是否存在奇数”这个条件。这个表达式对于lst中的每个元素x都执行一次,如果x % 2 == 1返回True,则any()函数会立即返回True。因为9是lst中的一个奇数,所以any()函数返回True。

除了列表,any()函数也适用于其他可迭代对象。例如,我们可以使用any()函数来检查一个字符串中是否存在大写字母:

s = "Hello, World!"
result = any(c.isupper() for c in s)
print(result)

输出:

True

在上面的示例中,我们使用字符串的isupper()方法来判断每个字符是否为大写字母,如果存在任意一个字符是大写字母,则any()函数返回True。因为"H"是一个大写字母,所以any()函数返回True。

在使用any()函数时,需要注意以下几点:

  • 如果iterable为空,any()函数将返回False。

  • 如果iterable中的所有元素都为假值(例如0、空字符串或空列表),则any()函数将返回False。

六、ascii()函数

用于将给定字符串或对象的表示转换为ASCII码。如果给定对象不是字符串,则会先将其转换为ASCII码表示。如果给定字符串中包含了非ASCII字符,则会使用Python的转义序列来表示这些字符。

以下是ascii()函数的语法:

ascii(object)

其中,object是要转换为ASCII码表示的字符串或对象。

以下是ascii()函数的示例:

s = 'hello, 你好!'
print(ascii(s)) 
# 输出: 'hello, \u4f60\u597d\uff01'

n = 1234
print(ascii(n)) 
# 输出: '1234'

lst = [1, 2, 'hello', '你好']
print(ascii(lst)) 
# 输出: '[1, 2, \'hello\', \'\\u4f60\\u597d\']'

在以上示例中,第一个示例中的字符串包含了一个非ASCII字符,因此在转换为ASCII码表示时使用了Python的转义序列;第二个示例中的对象是一个整数,因此可以直接转换为ASCII码表示;第三个示例中的对象是一个列表,其中包含了一个非ASCII字符串,因此在转换为ASCII码表示时使用了Python的转义序列。

注意事项

  • ascii()函数只能处理字符串类型的输入,对其他类型的对象(如数字、列表、元组、字典等)会引发TypeError异常。

  • ascii()函数只能处理ASCII字符以外的非ASCII字符,对于ASCII字符,它不做任何处理。(ASCII字符是指Unicode编码为0~127的字符,包括所有的英文字母、数字、标点符号和控制字符。)

  • ascii()函数返回的ASCII码表示是一个字符串,如果需要使用对应的Unicode码,可以使用Python内置的ord()函数。

以上是Python常用內建函數及用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除