🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #28350

Re: Pytania początkującego cz. 4 (ostatnia?)

#28350
From: Roman Dobosz
Date: Mon, 21 Nov 2011 17:26
101 lines
4676 bytes
On Mon, 21 Nov 2011 16:05:13 +0100
hubert depesz lubaczewski <depesz@depesz.com> wrote:

> hej
> to chyba już ostatnia część pytań bardzo początkujących - późniejsze
> pytania już (mam nadzieję) będą na bardziej konkretne tematy.
> 
> 1. czy jest jakiś standardowy, poleceny, "boilerplate"?
> przykład: w perlu, praktycznie zawsze używa się:
> use strict;
> use warnings;
> a jeśli ktoś pisze soft który ma obsługiwać utf, to boilerplate się
> "trochę" wydłuża
> (http://stackoverflow.com/questions/6162484/why-does-modern-perl-avoid-utf-8-by-default/#6163129)
> czy jest coś co każdy porządny program w pythonie powinien mieć na
> początku/końcu?

Nie ma czegoś takiego. Czasami, w zależności od przeznaczenia modułu,
będzie on zawierał linijkę shebang jako pierwszą linijkę skryptu
(zwykle '#!/usr/bin/env python' lub '#!/usr/bin/python'), ewentualnie
deklarację kodowania (np. '# vim: set fileencoding=utf8 :',
'# coding=utf8' lub '# -*- coding: <encoding name> -*-'), jeśli moduł
zawiera znaki spoza latin1[1] lub jest napisany dla pythona poniżej
wersji 3.0. Zwykle też, jeśli moduł ma być wykonywalny, dodaje się
jego wywołanie w postaci:

def foo():
...

if __name__ == '__main__':
    foo()

Po to, by móc zaimportować ten moduł bez wykonywania kodu w funkcji
foo[2].

> 2. jak pisać testy?

Python ma dwa framweorki w bibliotece standardowej do testowania:
unittest[3] i doctest[4]. Pomijając samo pisanie testów, istnieje
kilka narzędzi do ich znajdowania i uruchamiania, takich jak nosetest
[5] czy do zbierania i generowania raportów pokrycia[6]. Sporo
informacji na temat dostępnych narzędzi znajdziesz też tu[7]

> czy jest pythonowa implementacja TAP?

Jest zalążek TAP [8], ale nie wiem na jakim jest etapie.

> 3. co z polskimi znakami. Z tego co przeczytałem, teksty w apostrfach
> powinny być tylko w latin1, a jak chcę coś innego, to powinienem używać
> notacji u'...' i tam podawać codepointy unikodowe.

Możesz śmiało używać dowolnego kodowania, wystarczy zadeklarować owo
kodowanie na początku pliku (jak już wyżej pisałem) jeśli masz taką
potrzebę.

> i teraz nie wiem - czy źle przecyztałem/zrozumiałem, czy to faktycznie
> tak niewygodne?
> prosty test w python-shellu:
> >>> 'żółw'.upper()
> '\xc5\xbc\xc3\xb3\xc5\x82W'
> >>> print 'żółw'.upper()
> żółW
> >>> print 'żółw'.decode("UTF-8").upper()
> ŻÓŁW
> 
> pokazuje, że używanie utf-8 jest możliwe, ale dosyć upierdliwe (zawsze decode(...)).
> co przegapiłem?

$ cat t.py 
# vim: set fileencoding=utf8 :
print u'żółw'.upper()
$ python t.py
ŻÓŁW

W interpreterze trzeba temu pythonu powiedzieć, jakiego kodowania
używasz. W pythonie3 już nie trzeba, zakłada się, że używany jest
utf8:

$ python3
Python 3.1.4 (default, Oct 24 2011, 16:41:54) 
[GCC 4.5.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
'starting up...'
>>> 'żółw'.upper()
'ŻÓŁW'
>>> 


[1] http://www.python.org/dev/peps/pep-0263/
[2] http://effbot.org/pyfaq/tutor-what-is-if-name-main-for.htm
[3] http://docs.python.org/library/unittest.html
[4] http://docs.python.org/library/doctest.html
[5] http://code.google.com/p/python-nose/
[6] http://pypi.python.org/pypi/coverage
[7] http://packages.python.org/testing/
[8] http://git.codesimply.com/?p=PyTAP.git;a=summary

-- 
      -^-  _        coś tam w tle sobie gra, np:
   _ /O)_\//        Clan of Xymox - Stranger
  (_(|__(_(_) grf.  
Technical Details
Message-ID: <20111121182640.25692657.gryf_esm-no@spam-o2.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!.POSTED!not-for-mail
References: <9u5qp8-p6i.ln1@depesz.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!.POSTED!not-for-mail
From: Roman Dobosz <gryf_esm-no@spam-o2.pl>
Newsgroups: pl.comp.lang.python
Subject: Re: Pytania początkującego cz. 4 (ostatnia?)
Date: Mon, 21 Nov 2011 18:26:40 +0100
Organization: Elysium DeeZine
Lines: 101
Message-ID: <20111121182640.25692657.gryf_esm-no@spam-o2.pl>
References: <9u5qp8-p6i.ln1@depesz.com>
NNTP-Posting-Host: ebv26.neoplus.adsl.tpnet.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1321896399 17901 83.22.211.26 (21 Nov 2011 17:26:39 GMT)
X-Complaints-To: niusy@onet.pl
NNTP-Posting-Date: Mon, 21 Nov 2011 17:26:39 +0000 (UTC)
X-Newsreader: Sylpheed
X-Face: 4Y0>}MjX(3x}|)Oj%V51+Fxg%^QkQ7K}vC\yi[Qm/f/m7U5|xSLx[v*q12-?riU!YTdfa3B@1DwK?6`:3[63fD6gZuDlOtg/jE|$"L4`L[wD!'fC}1/aSd+Mz?|=`Ys;{_kl6GeFHE/fOhNK3p}n<D<!1.XtV+i!FBO!S"p)<f9`QsJ#:_D6e"Oq;a:OW|Yddx#x(lZ|m_M+Z)<=7.=)FRJns{[2%?qHw1tII&bz@Jp|m/Pow|jK`5\nu%7-b|on$7_N:ji^u*)3Az%src:9d85Sl=2OmD4CV}O}a`IEhZbd${@B
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit