1. __name__ == '__main__'
%%writefile hello_mge.py
print("I LOVE YOU")
def hello_message():
print("Hello World")
print("서강대학교")
if __name__ == '__main__':
hello_message()
else:
print('bye')
%run hello_mge.py
위 파일을 실행할 경우 위에서부터 실행된다.
1) I LOVE YOU
2) __name__ = '__main__'이 True이기에, Hello World와 서강대학교가 순차적으로 출력된다.
import hello_mge
hello_mge.py를 모듈로서 import하는 경우를 생각해보면 main파일이 hello_mge가 아니기 때문에
1) I LOVE YOU
2) __name__ = '__main__'이 False이기에, BYE가 출력된다.
여기서 주의해야할 사실은, import hello_mge를 처음 실행할때만 I LOVE YOU, BYE가 출력되고 이후엔 출력되지 않는다.
%%writefile NameA.py
def func():
print("function A.py입니다")
print("top-level A.py")
if __name__ == "__main__":
print("A.py 직접 실행되었습니다.")
else:
print("A.py import되었습니다.")
%%writefile NameB.py
import NameA
print("top-level B.py")
NameA.func()
if __name__=="__main__":
print("B.py 직접 실행되었습니다.")
else:
print("A.py import되었습니다.")
%run NameB.py
NameB.py를 실행한다.
1) import NameA:
top-level A.py
A.py import되었습니다.
2) top-level B.py
3) function A.py입니다.
4) B.py 직접 실행되었습니다.
ex)
%%writefile ExamA.py
def func():
print("FunctionA", end = "||")
print("top_level A", end = "||")
if __name__ = "__main__":
print("A.py 직접 실행", end = "||")
else:
print("A.py is running", end = "||")
%%writefile ExamB.py
import ExamA
print("top_level B", end = "||")
ExamA.func()
if __name__ = "__main__":
print("B.py 직접 실행", end = "||")
else:
print("B.py is running", end = "||")
ExamB.py를 실행할 경우,
top_level A || A.py is running || top_level B || FunctionA || B.py 직접 실행
2. shallow copy & deep copy
shallow copy의 예시는 위와 같음. 특정 variable을 가리키고 있는 변수, 그 변수를 다른 변수가 가리키도록 하는 것.
이 때 두 변수의 id값은 같기 때문에 특정 변수를 수정하면 다른 변수의 값 또한 바뀐다.
같은 data를 포함하더라도 선언을 달리 햇다면 그 id가 다르다.
두 list는 모두 동일한 원소 x를 공유하고 있는데, 이 때 lst1의 x를 바꾸려고 한다. 그러나 값의 변경이 두 list1,2 모두에 적용된 것을 확인할 수 있다. 우리는 이런 경우를 피하기 위해 deepcopy를 사용한다.
lst1을 deepcopy한 lst2에는 동일한 데이터가 들어있지만 이는 lst1와는 철저히 분리되어있다.
따라서 둘은 x를 share하고 있지 않기에 lst1의 x를 바꾸어도 lst2의 x값은 바뀌지 않았다.
함수로 전달한 num은 변하지 않았는데, lst는 변했다.
num은 정수이기에 불변형 데이터고, lst는 리스트로 가변형 데이터기 때문에 전역변수가 바뀐 것이다.
이런 문제를 deepcopy를 통해 해결할 수 있다.
3. dir & Sorted
dir()를 사용하면 module, class, method 등의 attributes를 살펴 볼 수 있다.
sorted(num): 오름차순으로 정렬한다. 문자열일 경우 알파벳순으로 정렬한다.
sorted(num, reverse = True): 내림차순으로 정렬한다.
sorted(col, key=len): 문자열의 길이 순서대로 오름차순으로 정렬한다.
4. how to import
1) import math as ma:
method를 사용할 때마다 ma.sin()와 같이 module_name . method_name의 형식을 갖춰야한다.
2) from math import sin, log:
특정 method만을 사용한다면 이와 같이 부르면 math.를 안붙여줘도된다.
3) from math import *:
모든 method를 다 불러오기 때문에 math.를 안 붙여줘도된다.
'프로그래밍언어 > python' 카테고리의 다른 글
[파이썬문법] 15. yield(generator) & lambda func (0) | 2022.04.22 |
---|---|
[파이썬문법] 14. 전역/지역변수 & *args/**kwargs (0) | 2022.04.22 |
[파이썬] openpyxl & selenium 활용법 (0) | 2022.02.08 |
[파이썬문법] 12. Threading(1) (0) | 2022.01.21 |
[파이썬문법] 11. Class(2) (0) | 2022.01.16 |