>  기사  >  백엔드 개발  >  Python 프로그래밍을 위한 효율적인 기술은 무엇입니까?

Python 프로그래밍을 위한 효율적인 기술은 무엇입니까?

PHPz
PHPz앞으로
2023-04-26 19:52:061386검색

목록 뒤집기

Python에서 목록을 뒤집는 방법에는 일반적으로 슬라이싱 또는 reverse() 함수 호출이라는 두 가지 방법이 있습니다. 두 메서드 모두 목록을 뒤집을 수 있지만 내장 함수 reverse()는 원래 목록을 변경하고 슬라이싱 메서드는 새 목록을 생성한다는 점에 유의하세요. reverse() 函数调用。这两种方法都可以反转列表,但需要注意的是内置函数 reverse() 会更改原始列表,而切片方法会创建一个新列表。

但是他们的表现呢?哪种方式更有效?让我们看一下下面的例子:

使用切片:

$ python -m timeit -n 1000000 -s 'import numpy as np' 'mylist=list(np.arange(0, 200))' 'mylist[::-1]'
1000000 loops, best of 5: 15.6 usec per loop

使用 reverse():

$ python -m timeit -n 1000000 -s 'import numpy as np' 'mylist=list(np.arange(0, 200))' 'mylist.reverse()'
1000000 loops, best of 5: 10.7 usec per loop

这两种方法都可以反转列表,但需要注意的是内置函数 reverse() 会更改原始列表,而切片方法会创建一个新列表。

显然,内置函数 reverse() 比列表切片方法更快!

交换两个值

用一行代码交换两个变量值是一种更具有 Python 风格的方法。

与其他编程语言不同,Python 不需要使用临时变量来交换两个数字或值。举个简单的例子:

variable_1 = 100 
variable_2 = 500

要交换 variable_1variable_2 的值,只需要一行代码。

variable_1, variable_2 = variable_2, variable_1

您也可以对字典使用相同的技巧:

md[key_2], md[key_1] = md[key_1], md[key_2]

该技巧可以避免多次迭代和复杂的数据转换,从而减少执行时间。

在函数内部循环

我们都喜欢创建自定义函数来执行我们自己的特定任务。然后使用 for 循环遍历这些函数,多次重复该任务。

但是,在 for 循环中使用函数需要更长的执行时间,因为每次迭代都会调用该函数。

相反,如果在函数内部实现了 for 循环,则该函数只会被调用一次。

为了更清楚地解释,让我们举个例子!

首先创建一个简单的字符串列表:

list_of_strings = ['apple','orange','banana','pineapple','grape']

创建两个函数,函数内部和外部都有 for 循环,从简单的开始。

def only_function(x):
    new_string = x.capitalize()
    out_putstring = x + " " + new_string
    print(output_string)

和一个带有循环的 for 函数:

def for_in_function(listofstrings):
    for x in list_of_strings:
        new_string = x.capitalize()
        output_string = x + " " + new_string
        print(output_string)

显然,这两个函数的输出是一样的。

然后,让我们比较一下,哪个更快?

Python 프로그래밍을 위한 효율적인 기술은 무엇입니까?Python 프로그래밍을 위한 효율적인 기술은 무엇입니까?

如您所见,在函数内使用 for 循环会稍微快一些。

减少函数调用次数

判断对象的类型时,使用 isinstance() 最好,其次是对象类型标识 id(),对象值 type() 最后。

# Check if num an int type
type(num) == type(0) # Three function calls
type(num) is type(0) # Two function calls
isinstance(num,(int)) # One function call

不要将重复操作的内容作为参数放在循环条件中,避免重复操作。

# Each loop the len(a) will be called
while i < len(a):
    statement
# Only execute len(a) once
m = len(a)
while i < m:
    statement

要在模块 X 中使用函数或对象 Y,请直接使用 from X import Y 而不是 import X; then X.Y

그렇다면 그들의 퍼포먼스는 어떨까요? 어떤 방법이 더 효과적인가요? 다음 예를 살펴보겠습니다. 🎜🎜슬라이스 사용:🎜rrreee🎜reverse() 사용:🎜rrreee🎜두 방법 모두 목록을 되돌릴 수 있지만 다음이 필요합니다. 내장 함수 reverse()는 원래 목록을 변경하고, 슬라이싱 메서드는 새 목록을 생성합니다. 🎜🎜분명히 내장 함수 reverse()가 목록 분할 방법보다 빠릅니다! 🎜🎜두 값 교환🎜🎜한 줄의 코드로 두 변수 값을 교환하는 것이 더 Python적인 접근 방식입니다. 🎜🎜다른 프로그래밍 언어와 달리 Python은 두 숫자나 값을 교환하기 위해 임시 변수를 사용할 필요가 없습니다. 간단한 예: 🎜rrreee🎜 variable_1variable_2의 값을 교환하려면 한 줄의 코드만 필요합니다. 🎜rrreee🎜 사전에도 동일한 트릭을 사용할 수 있습니다. 🎜rrreee🎜 이 트릭은 여러 번의 반복과 복잡한 데이터 변환을 방지하여 실행 시간을 단축합니다. 🎜🎜함수 내부 반복🎜🎜우리 모두는 자신만의 특정 작업을 수행하기 위해 사용자 정의 함수를 만드는 것을 좋아합니다. 그런 다음 for 루프를 사용하여 이러한 함수를 반복하고 작업을 여러 번 반복합니다. 🎜🎜그러나 for 루프 내에서 함수를 사용하면 반복할 때마다 함수가 호출되므로 실행 시간이 더 오래 걸립니다. 🎜🎜반대로 for 루프가 함수 내부에 구현되면 함수는 한 번만 호출됩니다. 🎜🎜더 명확하게 설명하기 위해 예를 들어보겠습니다! 🎜🎜간단한 문자열 목록을 만드는 것으로 시작하세요. 🎜rrreee🎜함수 내부와 외부에 for 루프가 있는 두 개의 함수를 만들고 간단하게 시작하세요. 🎜rrreee🎜 및 루프가 있는 for 함수: 🎜rrreee🎜분명히 두 함수의 출력은 동일합니다. 🎜🎜그럼 어느게 더 빠른지 비교해볼까요? 🎜🎜Python의 효율적인 기술은 무엇입니까파이썬의 효율적인 기술은 무엇입니까🎜🎜보시다시피 함수 내부에 를 사용하세요 for 루프가 약간 더 빠릅니다. 🎜🎜함수 호출 횟수 줄이기🎜🎜객체 유형을 판단할 때 isinstance()를 사용한 다음 객체 유형 식별자 id()를 사용하는 것이 가장 좋습니다. , 그리고 객체 값 type () 마지막으로. 🎜rrreee🎜반복 작업을 피하기 위해 반복 작업 내용을 루프 조건에 매개변수로 넣지 마세요. 🎜rrreee🎜모듈 X에서 함수나 개체 Y를 사용하려면 import X, X.Y 대신 from X import Y를 직접 사용하세요. 이렇게 하면 Y를 사용할 때 조회 횟수가 한 번 줄어듭니다(인터프리터는 먼저 X 모듈을 조회한 다음 X 모듈 사전에서 Y를 조회할 필요가 없습니다). 🎜

위 내용은 Python 프로그래밍을 위한 효율적인 기술은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제