2012-12-11 5 views
0

나는이 방법이 : 그것은 나에게 올바른 결과를 제공적은 코드로 동일한 코드를 작성하는 방법. 파이썬

def get_user_info(self): 

    month  = choice(range(1,13)) 
    day   = choice(range(1,29)) 
    year  = choice(range(1966,1994)) 
    f_name  = self.assign_name('FirstNames') 
    l_name  = self.assign_name('LastNames') 
    e_address = f_name+l_name+year.__str__()+day.__str__() 
    password = f_name+l_name+'0008383' 

    user_info = dict({ 
      'month'  : month, 
      'day'  : day, 
      'year'  : year, 

      'f_name' : f_name, 
      'l_name' : l_name, 
      'e_address' : e-address, 
      'password' : password 
    }) 

    print user_info 

을,하지만 두 번 같은 코드를 작성하는 것 같은 나는 입력합니다. 그래서 내 질문에 먼저 변수를 만들지 않고 동일한 결과를 얻고 dict() 넣을 방법입니다.

참고 : 다른 키 : 값 쌍에서 f_name과 l_name 등을 사용해야합니다.

+1

솔직히 말해서, 이것은 최적화를 바라 보는 잘못된 것입니다. –

+1

글쎄,'{expr1 : expr2, ..}'에서 (이미'{} '가 수행되기 때문에'dict'이 필요하지 않습니다.)'expr1'과'expr2'는 모두 * 임의의 표현식 *입니다. 그것들은 문자열 리터럴이나 변수 이름 일 필요는 없습니다. 두 종류의 표현 자체가 필요합니다. (따라서 표현식이기도 한'choice (range (1,13)) '가 적절히 대체 될 수 있습니다. , 복합 표현의 부작용을 막는 데있어 신중을 기합니다.) –

+0

이 질문은 [http://codereview.stackexchange.com/](http://codereview.stackexchange.com/) –

답변

3

당신이 컴퓨팅하고있는 가치를 감안할 때 지금하고있는 방식이 당신이 할 수있는 최선의 결과라고 생각하는 경향이 있습니다. dict으로 전화를 거는 대신 __str__ 메서드를 직접 호출하는 대신 str 내장 함수를 사용하는 등 약간의 개선점이 있지만 실제로 상위 수준에서는 아무런 변화가 없습니다.

이유는 변수의 처음 다섯 개를 두 번 이상 사용하기 때문입니다. 한 번 개별적으로 사용하면 사전에 자체적으로 저장된 값 (예 : f_name 값은 user_info["f_name"])으로 저장되며이 값을 사용하여 e_address 및/또는 password의 값을 구축 할 수도 있습니다. 첫 5 개의 값을 사전에 직접 입력 할 수는 있지만 다른 계산에 다시 사용하려면 지금 가지고있는 것보다 훨씬 많은 코드가 필요합니다.

따라서 e_address 또는 password 계산을 다른 값과 독립적으로 변경하고 싶지 않으면 보유하고있는 것에 집중해야합니다.

1

코드를 리팩토링하거나 길이를 줄이려는 경우 확실하지 않습니다.

후자의 경우 여러 번 할당하고 줄을 줄일 수 있습니다.

그래서 같은 :

def get_user_info(self): 

    month, day, year  = choice(range(1,13)) , choice(range(1,29)), choice(range(1966,1994)) 
    f_name, l_name  = self.assign_name('FirstNames') , self.assign_name('LastNames') 
    e_address, password = f_name+l_name+year.__str__()+day.__str__(), f_name+l_name+'0008383' 

그리고 '() 딕셔너리', {}은 이미 않는 당신이 정말로에 넣어 필요가 없습니다!

+1

Errw,이게 무엇을 해결합니까?:( –

+0

아무것도 실제로 tbh. – Kartik

0

이 (예를 들어,하지만 PEP8 compilance에 개선) 아마 당신이 가독성을 희생하지 않고 할 수있는 가장 짧은 :

보조 노트로
def get_user_info(self): 
     month = choice(range(1, 13)) 
     day = choice(range(1, 29)) 
     year = choice(range(1966, 1994)) 
     f_name = self.assign_name('FirstNames') 
     l_name = self.assign_name('LastNames') 
     print {'month' : month, 
       'day' : day, 
       'year' : year, 
       'f_name' : f_name, 
       'l_name' : l_name, 
       'e_address' : f_name + l_name + str(year) + str(day), 
       'password' : f_name + l_name + '0008383'} 

, 당신의 암호 생성 정책을 재고 할, 그것은 꽤 불안의 당신의 암호.

monthe_address에서 과제를 놓친 것 같습니다.

관련 문제