[]
- это литерал для list()
list()
- это конструктор списка.[range(5)]
означает "список содержащий один генератор", а list(range(5))
означает "привести генератор к списку". Во втором случае происходит вычисление генератора в пять целых чисел и конструирование списка из них. Можно ли совместить классы на Python 2.x с классами на Python 3.x в одном приложении
Нет, у меня нет никакого проекта который бы я собирался объединять с чем-то
Но если нельзя - то Python для меня один из худших языков, если не самый, учитывая его популярность
# example.py
@profile
def my_func():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del b
return a
if __name__ == '__main__':
my_func()
$ python -m memory_profiler example.py
# output:
Line # Mem usage Increment Line Contents
==============================================
3 @profile
4 5.97 MB 0.00 MB def my_func():
5 13.61 MB 7.64 MB a = [1] * (10 ** 6)
6 166.20 MB 152.59 MB b = [2] * (2 * 10 ** 7)
7 13.61 MB -152.59 MB del b
8 13.61 MB 0.00 MB return a
Но почему я не могу написать метод from_string так:cls вместо явного Date позволит наследнику Date (напр. AztecaDate - дата по календарю ацтеков) порождать именно AztecaDate.
Date(1, 1, 2019) # конструктор с сигнатурой (int, int, int)
Date("1.1.2019") # другой конструктор с сигнатурой (str)
В питоне можно добиться подобного, но ручками, анализируя состав аргументов Date.__init__, что неудобно, громоздко и нунафиг. Уж лучше забабахать Date.from_string. Но это неизбежно в динамическом языке - ведь C++ должен знать всё про аргументы конкретных вызовов конструкторов на этапе компиляции, а мы можем в рантайм творить что угодно )))для чего нужен staticmethod, если это уже не метод, а просто функция, и я могу вынести ее из класса.Да, можете. Я думаю, тут действует логика лучшей читаемости и логика экономии пространства имён:
from date import *
вы не получите охапку непонятных имён.# медленно
l = []
for i in range(100500):
l.append(i)
# чуть быстрее )))
push = l.append
for i in range(100500):
push(i)
>>> import lxml.html
>>> str1 = """
... <tr>
... <td>99</td>
... <td>Name</td>
... <td>ЕГЭ</td>
... <td>268</td><td>90</td><td>91</td><td>87</td>
... <td></td>
... <td>Копия</td>
... <td>Нет</td>
... </tr>"""
>>> root = lxml.html.fromstring(str1)
>>> [x.text for x in root.xpath('.//td')]
['99', 'Name', 'ЕГЭ', '268', '90', '91', '87', None, 'Копия', 'Нет']
from setuptools import setup
from my_pkg import constants
from os import path
this_directory = path.abspath(path.dirname(__file__))
with open(path.join(this_directory, 'README.md')) as f:
long_description = f.read()
setup(
name='my_pkg',
version=constants.MY_PKG_VERSION,
description='Pkg description',
author='Your Name',
author_email='your@ema.il',
url='http://github.com/some/user',
packages=[
'my_pkg',
'my_pkg.abstractions',
'my_pkg.exceptions',
],
long_description=long_description,
long_description_content_type='text/markdown',
include_package_data=True,
install_requires=[],
python_requires='>=3.4',
classifiers=[
"License :: OSI Approved :: MIT License",
"Programming Language :: Python",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Natural Language :: English",
"Operating System :: OS Independent",
"Development Status :: 1 - Planning",
"Intended Audience :: Developers",
"Intended Audience :: Education",
"Topic :: Software Development :: Libraries"],
package_data={
'': ['*.md', '*.txt', '*.json']
},
keywords='my_pkg',
license='MIT',
)
entry_points={
'console_scripts': ['your_command=my_pkg.cli.command_line:main'],
},