[파이썬] R과 차이점 01
/**
* jQuery Plugin: Sticky Tabs
*
* @author Aidan Lister
// Set the correct tab when the page loads showStuffFromHash(context);
// Set the correct tab when a user uses their back/forward button $(window).on('hashchange', function() { showStuffFromHash(context); });
// Change the URL when tabs are clicked $('a', context).on('click', function(e) { history.pushState(null, null, this.href); showStuffFromHash(context); });
return this; }; }(jQuery));
window.buildTabsets = function(tocID) {
// build a tabset from a section div with the .tabset class function buildTabset(tabset) {
// check for fade and pills options var fade = tabset.hasClass("tabset-fade"); var pills = tabset.hasClass("tabset-pills"); var navClass = pills ? "nav-pills" : "nav-tabs";
// determine the heading level of the tabset and tabs var match = tabset.attr('class').match(/level(\d) /); if (match === null) return; var tabsetLevel = Number(match[1]); var tabLevel = tabsetLevel + 1;
// find all subheadings immediately below var tabs = tabset.find("div.section.level" + tabLevel); if (!tabs.length) return;
// create tablist and tab-content elements var tabList = $('
'); $(tabs[0]).before(tabList); var tabContent = $('
'); $(tabs[0]).before(tabContent);
// build the tabset var activeTab = 0; tabs.each(function(i) {
// get the tab div var tab = $(tabs[i]);
// get the id then sanitize it for use with bootstrap tabs var id = tab.attr('id');
// see if this is marked as the active tab if (tab.hasClass('active')) activeTab = i;
// remove any table of contents entries associated with // this ID (since we'll be removing the heading element) $("div#" + tocID + " li a[href='#" + id + "']").parent().remove();
// sanitize the id for use with bootstrap tabs id = id.replace(/[.\/?&!#<>]/g, '').replace(/\s/g, '_'); tab.attr('id', id);
// get the heading element within it, grab it's text, then remove it var heading = tab.find('h' + tabLevel + ':first'); var headingText = heading.html(); heading.remove();
// build and append the tab list item var a = $('' + headingText + ''); a.attr('href', '#' + id); a.attr('aria-controls', id); var li = $('
'); li.append(a); tabList.append(li);
// set it's attributes tab.attr('role', 'tabpanel'); tab.addClass('tab-pane'); tab.addClass('tabbed-pane'); if (fade) tab.addClass('fade');
// move it into the tab content div tab.detach().appendTo(tabContent); });
// set active tab $(tabList.children('li')[activeTab]).addClass('active'); var active = $(tabContent.children('div.section')[activeTab]); active.addClass('active'); if (fade) active.addClass('in');
if (tabset.hasClass("tabset-sticky")) tabset.rmarkdownStickyTabs(); }
// convert section divs with the .tabset class to tabsets var tabsets = $("div.section.tabset"); tabsets.each(function(i) { buildTabset($(tabsets[i])); }); };
R과 파이썬의 차이 01
2022-04-29
코드 편집
들여쓰기(indentation)의 구성도 중요함
문서 편집기에서 눈에 보기에 줄이 맞아도 들여쓰기 오류가 발생할 수
있다. 코드 편집기에 따라 탭의 스페이스 개수가 다를 수 있다. 그리고 탭과
스페이스는 같은 문자가 아니기 때문에 이 둘을 혼용하면 눈으로 보기에는
들여쓰기가 일치하게 보이지만 구성이 달라 IndentationError가 발생한다.
PEP1에
따르면 들여쓰기로 space 4개를 권장한다. 그리고 tab은 최대한 지양하는
하는 것을 권장한다. 많은 에디터가 파이썬 소스 파일에 대해 들여쓰기의
구성을 알아서 통일해 주지만 그렇지 않은 경우에는 당황할 수 있다.2
여러 줄에 걸쳐 쓰기
R에서 하나의 표현식을 여러 줄에 걸쳐 쓰기 위해 필요한 특별한 표식이
없다. 단지 표현식 또는 함수가 그 줄에서 끝나지 않으면 된다.
x = 1 +
2
하지만 Python에서는 명시적인 줄바꿈 표시로 \
가
필요하다.
x = 1 + \
2
그리고 \
이후에는 어떤 문자도 없어야 한다.
공란(space)조차 구문 오류를 발생시킨다.
x = 1 + \
2 + \
3
그리고 주석 처리가 약간 복잡해지는데, 다음을 보자.
x = 1 + \
# 2 + \
3
위의 코드를 실행시키면, SyntaxError가 발생한다. 왜냐하면 위의 코드는
x = 1 + # 2 + 3
과 같기 때문이다(위의 코드를 파일로
저장하면 문자열로 "...\\\n# 2 + \\\n..."
와 같이
저장되는데 여기서 "\\\n"
만 제거한 결과로 생각하면 된다.
자세한 사항은 <문자열>장을 참고하자).
Python에서 하나의 표현식 또는 함수를 여러 줄에 걸쳐 쓰려면
괄호를 마치지 않는 방법이 더 편리할 것이다. 이 방법은
주석 처리도 쉽기 때문에 PEP8에서는 이 방법을
권장하고 있다.
x = (1 +
2 +
3)
x = (1 +
# 2 +
3)
참고로 PEP8에서는 +
와 같은 연산의 경우에는 줄의 처음에
쓰도록 권장한다. 왜냐하면 연산이 되는 대상의 이름이 길어지면 소스 코드를
읽기 힘들어질 수 있기 때문이다. 예를 들어 다음의 두 코드를
비교해보자.
x = (somevariablethis +
someothervariable -
thisvariablewillbesubtracted)
x = (somevariablethis
+ someothervariable
- thisvariablewillbesubtracted)
두 번째 코드는 무엇을 더하고 무엇을 빼지는 읽기가 수월하다.
왜 그럴까?
그런데 왜 파이썬은 이렇게 조금은 불편한 방식을 사용하는가? 필자의
경험에 의하면 튜플의 표기법과 관련이 있어 보인다. 튜플은 괄호 안에 여러
값을 쉼표로 나열하는 방식으로 표기한다.
tup = (1, 2, "This is a tuple")
tup
## (1, 2, 'This is a tuple')
파이썬에서 튜플은 괄호 없이 사용할 수도 있다.
tup = 1, 2, "This is a tuple"
tup
## (1, 2, 'This is a tuple')
그리고 원소가 하나인 튜플을 괄호없이 사용하면 다음과 같다.3 쉼표를
생략하면 숫자 1
과 튜플의 첫 번째 원소 1
과
구분이 불가능하므로, 쉼표가 반드시 있어야 한다.
tup = 1,
tup
## (1,)
이제 위의 파이썬 코드를 보자. 만약 줄바꿈을 제거한다면 다음과 같은
코드가 된다.
tup = 1, tup
그리고 아무런 오류없이 실행된다.
tup
## (1, (1,))
이렇게 파이썬에서는 줄바꿈이 있는 경우와 없는 경우가 모두 문법적으로
문제 없는 경우가 있다.
다음의 두 경우를 비교해보자. 첫 번째 코드는 하나의
할당(x=(3,func(y))
)을 의미하고, 두 번째 코드는
x=(3,)
과 func(y)
을 의미한다.
x = 3, \
func(y)
# x = (3, func(y))와 같다.
x = 3,
func(y)
# x=(3,); func(y)와 같다. ;는 줄바꿈을 의미한다.
// add bootstrap table styles to pandoc tables function bootstrapStylePandocTables() { $('tr.odd').parent('tbody').parent('table').addClass('table table-condensed'); } $(document).ready(function () { bootstrapStylePandocTables(); });
Leave a comment