python - 怎么判断函数或方法多次使用是否需要定义临时变量?
PHP中文网
PHP中文网 2017-04-17 17:51:16
0
4
356

自学一直有一个困扰(因为教程里不太会提及这种问题)
比如一些简单的函数或方法,如 len()isdigit()
多次使用的情况下

string = 'something'
if len(string) == 1:
   pass
elif len(string) == 2:
   pass

是否需要定义一个临时的变量

string = 'something'
length = len(string)
if len(length) == 1:
   pass
elif len(length) == 2:
   pass

这样变量多了一个,但是函数少计算一次
哪一种益处更大呢?
-是所有此类情况都用临时变量呢?
-还是具体函数具体分析,简单的不需要临时变量?
从资源合理利用的角度,怎么权衡这两种方案

PHP中文网
PHP中文网

认证高级PHP讲师

모든 응답(4)
刘奇

먼저 결론을 말씀드리겠습니다.

이 질문의 상황에서는 새로운 변수를 정의하지 않는 것을 지지합니다


질문에 대해 두 가지 측면에서 간략하게 답변해 드리겠습니다


우선 현재 프로그램의 핵심이 효율성이 아닌 경우 가독성 추구가 최우선 원칙이 되어야 합니다

어떻게 말할까요?

  1. 일부 프로그램과 코드 처리 문제는 속도를 추구하는 문제가 아닙니다. 예를 들어 과학적인 계산에 비해 단순한 과금 프로그램에 비하면 실행 속도의 최적화를 구체적으로 추구하는 것은 그다지 의미가 없습니다. 추구 효율적인 프로그램을 위해 현재 집중하고 있는 코드가 반드시 효율성의 핵심이라는 것을 의미하지는 않습니다(진정한 결정을 위해서는 프로파일링이 필요하며 성급한 최적화는 좋은 생각이 아닙니다). 요점은 성능 문제가 없고 이 코드 세그먼트로 인해 문제가 발생했다고 판단한 경우, 그렇지 않으면 특히 머신의 공간과 컴퓨팅 속도가 크게 향상되었으므로 리소스나 성능을 과도하게 고려할 필요가 없다는 것입니다. , 일부 함수 호출은 전혀 아무것도 아닙니다. 그렇지 않으면 oop 및 일부 추상화 기술을 더 이상 사용할 수 없습니다.

  2. 그래서 일반적으로 가독성을 추구하는 것이 더 나은 목표입니다. 물론 이 부분은 상황에 따라 다릅니다. 예를 들어 Refactoring이라는 책에서는 지역 변수 때문에 Temp를 쿼리로 바꾸는 방법을 언급할 수도 있습니다. 추출하기 어려운 코드. 그러나 항상 그런 것은 아닙니다. 때로는 쿼리 수식이 너무 길어서 코드를 읽기 어렵게 만들 수 있습니다. 즉, 이 부분에는 이러한 고려 사항과 편의가 있을 수 있습니다.


두 번째 부분에서는 효율성을 분석할 수 있습니다. len의 경우 Python에 데이터 구조가 내장되어 있으므로 다른 변수를 정의하지 않고 len 함수에서 직접 추출합니다. 해당 C - Object에서 반환되는 데이터의 길이 속성이므로 이 부분은 매우 빠릅니다. 즉, Python 자체가 자체 내장 데이터에 대한 길이 정보를 저장한다는 것입니다. len을 사용하면 추가 계산이 발생하지 않습니다. 계단식 호출이므로 효율성 문제를 전혀 고려할 필요가 없습니다.

게다가 len은 가독성이 뛰어나고 함수 길이도 매우 짧습니다.


P.S. 제가 이해한 내용이 틀렸다면 바로잡아주세요. 감사합니다

小葫芦

성능을 고려하면 임시 변수를 더 많이 사용하는 것이 좋습니다.

Ty80

으아악

우선 프로그램을 수정하세요. len()임시 변수에도 의미 있는 이름을 붙여야 합니다.
시간 복잡도에 대한 개념이 있는지 모르겠습니다. 즉, 문자열에 n개의 요소가 있는 경우 프로그램은 n 단계를 거쳐야 합니다. 목표에 따르면, 앞으로 이 알고리즘을 m번 사용해야 한다면 프로그램의 시간 복잡도는 완료하는 데 최소 n*m 단계가 소요됩니다.

임시 변수를 사용하여 이 알고리즘을 기록하면 값을 찾는 시간 복잡도는 O(1)에 불과합니다. 즉, 프로그램의 전체 복잡도가 O(n*m)로 줄어듭니다. )에서 O(n+m)으로, n <= m인 경우 프로그램의 시간 복잡도는 원래 O(N^2)에서 O(N)으로 줄어듭니다.

임시 변수를 더 많이 사용한다는 생각에 동의하지 않습니다. 프로그램에서 임시 변수의 빈도가

  1. 프로그램의 시간 복잡도가 대폭 줄어들었나요?

  2. 다른 사람이 귀하의 의도를 더 쉽게 이해할 수 있습니까?

  3. 코드가 좀 더 간결해 보일 수 있나요?

Peter_Zhu

이 문제는 일반적으로 현지 상황에 맞춰져 있습니다. 두 가지 판단만 있으면 변수를 정의할 필요가 없으므로 너무 많은 변수를 유지하기가 어렵습니다. 길이에 관한 한 판단이 여러 개인 경우 스위치 케이스를 사용하고 len() 메서드를 매개 변수로 직접 전달하고 가장 가능성이 높은 옵션을 먼저 넣을 수 있습니다. 저는 Python을 배운 적이 없지만, 스위치 케이스 방식이 있어야 한다고 생각합니다. 내 경험에 따르면 임시 변수를 가능한 한 적게 정의하면 변수 관리가 어려워집니다. 물론 for 루프와 같은 일부 위치에서는 변수가 필요합니다. 배열의 길이를 저장하기 위해 임시 변수를 정의하면 성능이 향상됩니다. 즉, 모든 것이 현실에 기반을 두어야 하며, 임시 변수가 현재 코드의 가독성과 유지 관리성을 크게 향상시킬 수 있는 경우에는 임시 변수가 필요합니다. 그렇지 않으면 정의되지 않습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!