2013-09-01 3 views
-1

안녕하세요, 제 첫 번째 게시물입니다. 코드를 작성하는 법을 배우기 때문에 기술적으로는 초보자입니다.코드의 순서로이 프로그램을 더 빠르게 만들 수 있습니까?

저는 파이썬을 배우고 있습니다. 저는 여전히 매우 기초적입니다. if 문을 알기 시작했고 파이썬에 대한 더 넓은 비전을 얻기 위해 다른 개념 (함수 정의, 입력, 변수)과 혼합하려고했습니다. 나는 내가하고 싶은 것에 대한 구체적인 생각이없는 코드를 썼다. 나는 지금까지 배운 모든 것을 섞어서 사용하고 싶었고 아마도 그것을 끝내었고 그것을 실천하지 못했다. 나는 그것을 실행할 때 "작동한다".

내가 더 효율적으로 또는 적은 코드로 처리하는 방법에 관한 질문은 일반적으로 모든 프로그래밍의 코드 순서에 관한 것입니다. 여기서 동일한 코드를 사용하여 동일한 결과를주는 두 가지 순서의 코드를 보여 드리겠습니다 (순서는 다를 수 있음).

on (1) 첫 번째 줄에 함수를 정의합니다.
on (2) 5 행에서 사용할 때와 동일한 기능을 더 가깝게 정의합니다.

어느 쪽이 빠릅니까? 더 큰 프로그램의 복잡성에 비실용적 일 필요가있을 때 (더 빨리 만들 수있을 때) 함수를 "더 가깝게"정의하거나, 필요한 곳에서 "멀리"함수를 정의하면 더 큰 프로그램을 실행할 때 더 느리게 만듭니다 (또한 더 실용적).

(1)

def t(n1,n2): 
    v=n1-n2 
    return abs(v) 
a = int(input('how old are you? \n')) 
b = int(input('how old is your best friend? \n')) 

c=t(a,b) 

if a==b: 
    print ('you are both the same age') 

else: 
    print('you are not the same age\nthe difference of years is %s year(s)' % c) 

input() 

(2)

a = int(input('how old are you? \n')) 
b = int(input('how old is your best friend? \n')) 

def t(n1,n2): 
    v=n1-n2 
    return abs(v) 

c=t(a,b) 

if a==b: 
    print ('you are both the same age') 

else: 
    print('you are not the same age\nthe difference of years is %s year(s)' % c) 

input() 
+0

걱정이 될 때까지 속도에 대해 걱정하지 마십시오. 마음에 드는 속도가 너무 느려지는 큰 코드 조각을 가지고 있다면 먼저 더 나은 알고리즘을 찾을 수 있는지 확인하십시오. –

+0

@RolandSmith 나는 변화가 있는지를 알고 싶었 을까 걱정하지 않았다. – marsulld

+0

속도를 측정하려면 [프로파일 러] (http://docs.python.org/2/library/profile.html)를 사용해야합니다. –

답변

0

그것은 차이 조금도하지 않는다. 가장 가독성이 높은 것은 무엇이든하십시오.

+0

사용자 감사합니다. 머리에서 꺼낼 수 없었습니다. – marsulld

+0

알고리즘의 점근 적 성능은 O (1)이므로 개선 할 수 없습니다. 그러나 알고리즘이 여러 번 실행될 때 알고리즘의 실제 런타임을 약간 향상시킬 수있는 방법은 많습니다. 그러나이 특정 사례에서 변경 한 사항은 많은 영향을 미치지 않습니다. – Nuclearman

1

함수 정의는 함수 호출 위에 있어야하지만 함수 정의와 함수 호출 사이의 거리는 중요하지 않습니다 (함수 코드가 이미로드되어 있으므로).

프로그램을 빠르게 만드는 한 가지 방법은 계산을 한 번 수행하고 결과를 변수에 저장하고 결과가 필요할 때마다 해당 변수를 사용하여 동일한 결과를 산출하는 반복 계산을 방지하는 것입니다.

예를 들어, 프로그램이 매우 큰 튜플을 처리한다고 가정합니다. 코드에서 len(veryLargeTuple)이 여러 번 발생하면 Python은 매우 큰 튜플의 길이를 반복적으로 결정하려고 시도합니다. 튜플은 불변이므로 길이가 변하지 않을 것이므로 매우 많은 튜플의 길이를 찾는 데는 시간이 걸릴 수 있으므로 시간 낭비입니다. len(veryLargeTuple)의 결과를 변수 veryLargeTupleLength에 저장하고 매우 큰 튜플의 길이가 필요할 때마다 veryLargeTupleLength을 사용하는 것이 더 빠릅니다 (변수 값을 찾는 것은 매우 빠른 작업입니다).

관련 문제