<jupyter_start><jupyter_text>1. 1 Four Kinds of Quotes - 네가지 종류의 인용여러분이 알만한 트릭부터 시작해 보겠습니다. 다른 언어로부터 오셨다면, 아마도 한 곳에서는 홑따옴표를 사용하고 다른 곳에서는 겹따옴표를 사용해 오셨을 것입니다. 파이썬에서는 둘 모두를 사용할 수 있습니다. 물론 서로 교환해 쓸수는 없습니다 (그 중 하나로 시작했다면 끝날 때도 같은 것을 사용해야 합니다). 파이썬은 두 가지 유형의 인용방식을 더 지원합니다. 삼중 홑따옴표(''')는 세개의 홑따옴표를 타자하여 만듭니다. 삼중-겹따옴표(""")는 세개의 겹따옴표를 타자하여 만듭니다. 그래서 인용문자를 피신시키는데 신경쓸 필요 없이 여러 겹으로 인용할 수 있습니다. 예를 들어, 다음은 유효한 파이썬 구문입니다:<jupyter_code>print """I wish that I'd never heard him say, '''She said, "He said, 'Give me five dollars'"'''"""<jupyter_output>I wish that I'd never heard him say, '''She said, "He said, 'Give me five dollars'"'''<jupyter_text>1. 2 Truthfulness of Various Objects - 다양한 객체의 진위어떤 프로그래밍 언어와는 다르게( Javascript ) 파이썬의 유형은 비어 있으면 거짓입니다. 그렇지 않으면 참입니다. 즉 문자열이나 터플 또는 리스트나 사전의 길이가 0인지, 즉 비어 있는지 점검할 필요가 없다는 뜻입니다. 그냥 그 객체의 진위만 점검해도 충분합니다.예상하시겠지만, 숫자 0도 거짓입니다. 반면에 다른 숫자는 모두 참입니다.예를 들어, 다음 표현식은 동등합니다. 여기에서, 'my_object'는 문자열이지만, (동등성 테스트에 맞게 적절하게 수정하면) 쉽게 또다른 파이썬 유형이 될 수 있습니다.<jupyter_code>myobject = 'Test'

if len(myobject) > 0:
    print 'myobject is not empty'

if len(myobject):
    print 'myobject is not empty'

if myobject != '':
    print 'myobject is not empty'

if myobject:
    print 'myobject is not empty'
myobject = ''

if len(myobject) > 0:
    print 'myobject is not empty'

if len(myobject): # 0 will evaluate to False
    print 'myobject is not empty'

if myobject != '':
    print 'myobject is not empty'

if not myobject: # an empty string will evaluate to False
    print 'myobject is empty'<jupyter_output>myobject is empty<jupyter_text>결론적으로 오직 그 객체가 비어있는지 아닌지만 관심 사항이라면 실제로 길이나 동등성을 점검할 필요가 없습니다.  1. 3 Checking if a String Contains a Substring - 문자열에 부분문자열이 들어 있는지 점검하기다음은 확실하게 보이는 힌트이지만, 본인은 이해하는데 일년이 넘게 걸렸습니다.아마도 리스트나 터플 또는 사전에 항목이 있는지 점검할 수 있다는 것을 아실 겁니다. 다음 'item in list' 또는 'item not in list' 표현식을 테스트해 보면 됩니다. 본인은 이것이 문자열에도 작동한다는 것을 알지 못했습니다. 언제나 다음과 같이 코딩을 하고 있었습니다:<jupyter_code>string = 'Hi there' # True example
# string = 'Good bye' # False example
if string.find('Hi') != -1:
    print 'Success!'
string = 'Hi there' # True example
# string = 'Good bye' # False example
if 'Hi' in string:
    print 'Success!'<jupyter_output>Success!<jupyter_text>코드가 보기 흉하지요. 'if substring in string'과 완전히 똑같습니다:훨씬 깔끔하고 간단합니다. 누구나 이해할 만큼 쉽지만, 저는 좀 더 일찍 알았더라면 하는 아쉬움이 있습니다.  1. 4 Pretty-Printing a List - 리스트 예쁘게-출력하기리스트는 인쇄가 깔끔하지 못합니다. 물론 리스트가 무엇인지는 알지만, 일반 사용자는 원소마다 덕지덕지 붙은 따옴표가 보기 싫을 겁니다. 이를 해결하는 간단한 방법이 있습니다. 문자열의 'join' 메쏘드를 사용하는 것입니다:<jupyter_code>AEIS = ['<NAME>', '<NAME>', '<NAME>', '<NAME>']
print 'AEIS member : %s' % ', '.join(AEIS)<jupyter_output>AEIS member : <NAME>, <NAME>, <NAME>, <NAME><jupyter_text>join 메쏘드는 리스트를 문자열로 바꾸어 줍니다.각 원소를 문자열로 강제 형변환하여 그들을 join이 호출된 문자열에 결합합니다.아주 똑똑해서 마지막 원소 다음에는 문자열을 더 붙이지 않습니다.또 장점이 있다면, 이것은 아주 빨라서 실행시간이 선형입니다. 문자열을 만들 때 절대로 for 회돌이 안에서 '+'를 사용하여 리스트 원소들을 더하지 마세요: 보기 흉할 뿐아니라, 제곱 시간이 걸리기 때문입니다!  1. 5 Integer vs. Float DivisionBy default, if you divide one integer by another, the result will be truncated into an integer. **For example, executing 5/2 returns 2.**There are two was to fix this. The first and simplest way is to just turn one of the integers into a float. If the values are static, **you can just append a .0 to one to make it a float: 5.0/2 returns 2.5. Alternatively, you can just cast one of the values: float(5) / 2 returns 2.5.**The other way will result in cleaner code, but you must make sure none of your code is relying on this truncation. **You can do a from __future__ import division to change Python to always return a float as the result of a division.** After such an import, 5/2 will return 2.5. If you still need to use the truncating integer division somewhere, you can then use the // operator: 5//2 will always return 2.<jupyter_code>print 5/2        # Returns 2
print 5.0/2      # Returns 2.5
print float(5)/2 # Returns 2.5
print 5//2       # Returns 2

from __future__ import division
print 5/2        # Returns 2.5
print 5.0/2      # Returns 2.5
print float(5)/2 # Returns 2.5
print 5//2       # Returns 2<jupyter_output>2
2.5
2.5
2
2.5
2.5
2.5
2<jupyter_text>1. 6  Lambda Functions  - 람다 함수가끔 함수를 인자로 건네야 할 경우가 있습니다. 또는 짧지만 복잡한 연산을 여러 번 하고 싶을 경우가 있습니다. 함수를 일반적인 방식으로 정의해도 되며, 람다 함수를 만들어도 됩니다. 람다 함수는 단 하나의 표현식의 결과를 돌려주는 미니-함수입니다. 두 정의는 완전히 동일합니다:<jupyter_code>def add(a,b): return a+b

add2 = lambda a,b : a+b

print add(5,6)
print add2(5,6)<jupyter_output>11
11<jupyter_text>람다 함수의 이점은 그 자체로 표현식입니다. 그래서 또다른 서술문 안에 사용될 수 있습니다. 다음은 map 함수를 사용하는 예인데, 리스트의 매 원소마다 함수를 호출하여, 그 결과를 리스트에 담아 돌려줍니다. (아래 지능형 리스트(List Comprehensions) 섹션에서 map이 별로 쓸모없다는 좋은 사례를 보여줍니다. 그렇지만, 훌륭한 한줄짜리 예제입니다.)<jupyter_code>squares = map(lambda a: a*a, [1,2,3,4,5])
# squares is now [1,4,9,16,25]

print squares<jupyter_output>[1, 4, 9, 16, 25]
{'fraction_non_alphanumeric': 0.09384908053265695, 'fraction_numerical': 0.023462270133164237, 'mean_word_length': 3.5941747572815532, 'pattern_counts': {'":': 0, '<': 30, '<?xml version=': 0, '>': 32, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '354880', 'license': 'BSD-3-Clause', 'n_tokens_mistral': 2959, 'n_tokens_neox': 3454, 'n_words': 786, 'path': 'notebook/python_tip_trick_hack/1.Quick_Tricks.ipynb', 'repo_name': 'Jungmo/python_practice', 'size': '4773'}