-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup.py
159 lines (95 loc) · 4.11 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
from setuptools import setup
setup(
name = "streampy",
version = "0.0.1",
description = "Java 8 Stream API/Collectors/Function Interface/Optional 在 Python 3.6+ 的实现",
author = "17097231932",
author_email = "17097231932@163.com",
url = "https://github.com/17097231932/Stream.py",
py_modules=['stream'],
entry_points={
'console_scripts': [
'stream=stream:cli',
],
},
long_description = """# Stream.py
Java 8 Stream API/Collectors/Function Interface/Optional 在 Python 3.6+ 的实现
## Stream.py 是什么?
是一个处理数据的工具,它使用声明式的API,简单易读
## 简介
Java 8 Stream API/Collectors/Function Interface/Optional 在 Python 3.6+ 的实现
Stream是一个在某些数据上的抽象视图. 比如, Stream可以是一个list或者
文件中的几行或者其他任意的一个元素序列的视图. Stream API提供可以顺序
表现或者并行表现的操作总和. 开发者需要明白一点, Stream 是一种更高阶的
抽象概念, 而不是一种数据结构. Stream 不会储存数据, Stream 天生就很懒,
只有在被使用到时才会执行计算.它允许我们产生无限的数据流(stream of data).
在我看来,Stream.py 的代码更好主要有以下几点原因:
1. Stream.py代码能够清晰地表达开发者对数据过滤, 排序等操作的意图.
2. 通过使用Stream API格式的更高抽象, 开发者表达他们所想要的是
什么而不是怎么去得到这些结果.
3. Stream API为数据处理提供一种统一的语言, 使得开发者在谈论数
据处理时有共同的词汇. 当两个开发者讨论filter函数时, 你都会
明白他们都是在进行一个数据过滤操作.
4. 开发者不再需要为实现数据处理而写的各种样板代码, 也不再需要
为loop代码或者临时集合来储存数据的冗余代码, Stream API会
处理这一切.
5. Stream不会修改潜在的集合, 它是非交换的.
注意: 不支持并行
因为在CPU密集的情况下, Python GIL只允许一个线程执行,
所以并行意义不大, 而且如果在多线程情况下, 数据共享和
内存占用得不偿失, 所以不支持并行及其相关函数.
提示: 和 Java 8 Stream API 的不同之处:
1. reduce 只是一个中间操作
2. Collectors 中的内容只是一个函数, 而非实例
3. 由于 Python 是动态类型, 所以函数式接口靠实例化指定类型
4. LongStream 是 IntStream
用法
````python
print(["Apple", "Banana", "Blackberry", "Coconut", "Avocado", "Cherry", "Apricots"]
.stream()
.collect(Collectors.groupingBy(lambda s: s[0], Collectors.toList()))
) # {'A': ['Apple', 'Avocado', 'Apricots'], 'B': ['Banana', 'Blackberry'], 'C': ['Coconut', 'Cherry']}
print(["APPL:Apple", "MSFT:Microsoft"]
.stream()
.collect(Collectors.toMap(lambda s: s[:s.find(':')], lambda s: s[s.find(':') + 1:]))
) # {'APPL': 'Apple', 'MSFT': 'Microsoft'}
print(["Orange", "apple", "Banana"]
.stream()
.sorted(lambda x, y: ord(x[0]) > ord(y[0]))
.collect(Collectors.toList())
) # ['Banana', 'Orange', 'apple']
print(["A", "B", "A", "C", "B", "D"]
.stream()
.distinct()
.collect(Collectors.toList())
) # ['B', 'A', 'C', 'D']
print(("A", "B", "C", "D", "E", "F")
.stream()
.skip(2)
.limit(3)
.collect(Collectors.toList())
) # ['C', 'D', 'E']
````
CLI
````
$ stream -h
选项: stream [-h] [-f FILE] [-i IMPORTS] command
stream.py: Java 8 Stream API 在 Python 3.6+ 的实现
参数:
command 在输入流中执行的命令
-h, --help 显示帮助
-f file 处理的文件
-i imports 导入模块
模块导入格式:
语法: <模块>:<对象>:<别名>[;<更多导入>[;<更多导入> ...]]
例子:
'import os' = '-i os'
'import os as op_sys' = '-i os::op_sys'
'from os import environ' = '-i os:environ'
'from os import environ as env' = '-i os:environ:env'
'import sys, os' = '-i os;sys'
命令格式:
特殊变量 _ 为Stream实例
````
"""
)