@@ -165,7 +165,7 @@ rft_option
165
165
这里面列出的名称仅对模块内部定义的名称有效,对于导入的名称无效
166
166
167
167
参数和局部变量总是会被重命名,这里列出的名称对参数和局部变量不起作用
168
- * - rft_exclude_calls
168
+ * - rft_exclude_funcs
169
169
- 模式列表
170
170
-
171
171
- 这里面列出的函数名称,对应的参数都不进行重命名::
@@ -228,161 +228,163 @@ rft_option
228
228
- "no" 不重名,也不记录到日志
229
229
- "err" 报错退出
230
230
231
- 高级选项
232
- ~~~~~~~~
231
+ 该选项功能尚未实现
233
232
234
- - rft_str_keywords
233
+ ..
234
+ 下列选项为内部选项,
235
235
236
- 这种类型的规则可以重命名指定范围(模块,函数,工程)中的字符串常量,包括字典常量中的 Key,以及下标 Subscript 的 Key
236
+ - rft_str_keywords
237
237
238
- 默认情况下,函数参数会全部重命名。例如:
238
+ 这种类型的规则可以重命名指定范围(模块,函数,工程)中的字符串常量,包括字典常量中的 Key,以及下标 Subscript 的 Key
239
239
240
- .. code :: python
240
+ 默认情况下,函数参数会全部重命名。例如:
241
241
242
- def show (a , b , / , c , d = 2 , * args , ** kwargs ):
243
- ...
242
+ .. code :: python
244
243
245
- # 重构之后
246
- def pyarmor__1 (pyarmor__2 , pyarmor__3 , pyarmor__4 , pyarmor__5 = 2 , * pyarmor__6 , ** pyarmor__7 ):
247
- ...
244
+ def show (a , b , / , c , d = 2 , * args , ** kwargs ):
245
+ ...
248
246
249
- 但是这样可能会导致调用函数的时候出现参数找不到的错误
247
+ # 重构之后
248
+ def pyarmor__1 (pyarmor__2 , pyarmor__3 , pyarmor__4 , pyarmor__5 = 2 , * pyarmor__6 , ** pyarmor__7 ):
249
+ ...
250
250
251
- 因为函数调用的时候可能通过多种形式指定参数名称,例如
251
+ 但是这样可能会导致调用函数的时候出现参数找不到的错误
252
252
253
- .. code :: python
253
+ 因为函数调用的时候可能通过多种形式指定参数名称,例如
254
254
255
- # case 1: 这种情况会自动识别和处理
256
- show(2 , 5 , c = 2 , d = 8 )
255
+ .. code :: python
257
256
258
- # case 2: 参数名称在 dict 常量中
259
- kwarg = { ' c' : 1 , ' d' : 3 }
260
- show(1 , 9 , ** kwarg)
257
+ # case 1: 这种情况会自动识别和处理
258
+ show(2 , 5 , c = 2 , d = 8 )
261
259
262
- # case 3 : 参数名称在 subscript 中的字符串常量
263
- kwarg[ ' c' ] = 8
264
- show(1 , 10 , ** kwarg)
260
+ # case 2 : 参数名称在 dict 常量中
261
+ kwarg = { ' c' : 1 , ' d ' : 3 }
262
+ show(1 , 9 , ** kwarg)
265
263
266
- # case 4: 参数是 dict 函数的关键字参数
267
- kwarg = dict ( d = 6 )
268
- show(1 , 10 , 5 , ** kwarg)
264
+ # case 3: 参数名称在 subscript 中的字符串常量
265
+ kwarg[ ' c ' ] = 8
266
+ show(1 , 10 , ** kwarg)
269
267
270
- 默认情况下不会对字符串进行重命名,所以除了第一种情况外,其他情况都不会进行自动处理。重构后的代码如下:
268
+ # case 4: 参数是 dict 函数的关键字参数
269
+ kwarg = dict (d = 6 )
270
+ show(1 , 10 , 5 , ** kwarg)
271
271
272
- .. code :: python
272
+ 默认情况下不会对字符串进行重命名,所以除了第一种情况外,其他情况都不会进行自动处理。重构后的代码如下:
273
273
274
- # case 1: 这种情况会自动识别和处理
275
- pyarmor__1(2 , 5 , pyarmor__4 = 2 , pyarmor__5 = 8 )
274
+ .. code :: python
276
275
277
- # case 2: 字符串参数不会重构
278
- pyarmor__10 = { ' c' : 1 , ' d' : 3 }
279
- pyarmor__1(1 , 9 , ** pyarmor__10)
276
+ # case 1: 这种情况会自动识别和处理
277
+ pyarmor__1(2 , 5 , pyarmor__4 = 2 , pyarmor__5 = 8 )
280
278
281
- # case 3: 参数名称在 subscript 中的字符串常量
282
- pyarmor__10[ ' c' ] = 8
283
- pyarmor__1(1 , 10 , ** pyarmor__10)
279
+ # case 2: 字符串参数不会重构
280
+ pyarmor__10 = { ' c' : 1 , ' d ' : 3 }
281
+ pyarmor__1(1 , 9 , ** pyarmor__10)
284
282
285
- # case 4: 参数是 dict 函数的关键字参数
286
- pyarmor__10 = dict ( d = 6 )
287
- pyarmor__1(1 , 10 , 5 , ** pyarmor__10)
283
+ # case 3: 参数名称在 subscript 中的字符串常量
284
+ pyarmor__10[ ' c ' ] = 8
285
+ pyarmor__1(1 , 10 , ** pyarmor__10)
288
286
289
- 为了修改字符串中的关键字参数名称 `c ` 和 `d ` , 需要使用下面的命令增加规则::
287
+ # case 4: 参数是 dict 函数的关键字参数
288
+ pyarmor__10 = dict (d = 6 )
289
+ pyarmor__1(1 , 10 , 5 , ** pyarmor__10)
290
290
291
- $ pyarmor env push rft_option:rft_str_keywords "fibo:show c d"
291
+ 为了修改字符串中的关键字参数名称 ` c ` 和 ` d ` , 需要使用下面的命令增加规则::
292
292
293
- 这样重构之后会修改字符串和字典常量中关键字字符串,例如:
293
+ $ pyarmor env push rft_option:rft_str_keywords "fibo:show c d"
294
294
295
- .. code :: python
295
+ 这样重构之后会修改字符串和字典常量中关键字字符串,例如:
296
296
297
- # case 1: 这种情况会自动识别和处理
298
- pyarmor__1(2 , 5 , pyarmor__4 = 2 , pyarmor__5 = 8 )
297
+ .. code :: python
299
298
300
- # case 2: 字符串参数名称进行了重命名
301
- pyarmor__10 = { ' pyarmor__4' : 1 , ' pyarmor__5' : 3 }
302
- pyarmor__1(1 , 9 , ** pyarmor__10)
299
+ # case 1: 这种情况会自动识别和处理
300
+ pyarmor__1(2 , 5 , pyarmor__4 = 2 , pyarmor__5 = 8 )
303
301
304
- # case 3 : 字符串参数名称进行了重命名
305
- pyarmor__10[ ' pyarmor__4' ] = 8
306
- pyarmor__1(1 , 10 , ** pyarmor__10)
302
+ # case 2 : 字符串参数名称进行了重命名
303
+ pyarmor__10 = { ' pyarmor__4' : 1 , ' pyarmor__5 ' : 3 }
304
+ pyarmor__1(1 , 9 , ** pyarmor__10)
307
305
308
- # case 4: dict 函数的关键字参数没有进行重命名
309
- pyarmor__10 = dict ( d = 6 )
310
- pyarmor__1(1 , 10 , 5 , ** pyarmor__10)
306
+ # case 3: 字符串参数名称进行了重命名
307
+ pyarmor__10[ ' pyarmor__4 ' ] = 8
308
+ pyarmor__1(1 , 10 , ** pyarmor__10)
311
309
312
- 对于第四种情况,有两种处理方案
310
+ # case 4: dict 函数的关键字参数没有进行重命名
311
+ pyarmor__10 = dict (d = 6 )
312
+ pyarmor__1(1 , 10 , 5 , ** pyarmor__10)
313
313
314
- 一是人工把原来的代码替换成为字典常量 ` { "key": value } ` ,例如:
314
+ 对于第四种情况,有两种处理方案
315
315
316
- .. code :: python
316
+ 一是人工把原来的代码替换成为字典常量 ` { "key": value } ` ,例如:
317
317
318
- # case 4: 参数是 dict 函数的关键字参数,需要替换成为字典常量
319
- kwarg = {' d' : 6 } # kwarg = dict(d=6)
320
- show(1 , 10 , 5 , ** kwarg)
318
+ .. code :: python
321
319
322
- 二是不修改代码,而是使用下面的配置,不重名函数 show 的参数,例如::
320
+ # case 4: 参数是 dict 函数的关键字参数,需要替换成为字典常量
321
+ kwarg = {' d' : 6 } # kwarg = dict(d=6)
322
+ show(1 , 10 , 5 , ** kwarg)
323
323
324
- $ pyarmor env rft_option:rft_exclude_args fibo::show
324
+ 二是不修改代码,而是使用下面的配置,不重名函数 show 的参数,例如::
325
325
326
- 使用第二种方案重构之后,函数 show 仅 posonly, stararg 和 kwarg 会进行重命名,其他参数都保持不变,例如:
326
+ $ pyarmor env rft_option:rft_exclude_args fibo::show
327
327
328
- .. code :: python
328
+ 使用第二种方案重构之后,函数 show 仅 posonly, stararg 和 kwarg 会进行重命名,其他参数都保持不变,例如:
329
329
330
- # case 1:
331
- pyarmor__1(2 , 5 , c = 2 , d = 8 )
330
+ .. code :: python
332
331
333
- # case 2:
334
- pyarmor__10 = { ' c' : 1 , ' d' : 3 }
335
- pyarmor__1(1 , 9 , ** pyarmor__10)
332
+ # case 1:
333
+ pyarmor__1(2 , 5 , c = 2 , d = 8 )
336
334
337
- # case 3 :
338
- pyarmor__10[ ' c' ] = 8
339
- pyarmor__1(1 , 10 , ** pyarmor__10)
335
+ # case 2 :
336
+ pyarmor__10 = { ' c' : 1 , ' d ' : 3 }
337
+ pyarmor__1(1 , 9 , ** pyarmor__10)
340
338
341
- # case 4 :
342
- pyarmor__10 = dict ( d = 6 )
343
- pyarmor__1(1 , 10 , 5 , ** pyarmor__10)
339
+ # case 3 :
340
+ pyarmor__10[ ' c ' ] = 8
341
+ pyarmor__1(1 , 10 , ** pyarmor__10)
344
342
345
- - rft_get_setattr
343
+ # case 4:
344
+ pyarmor__10 = dict (d = 6 )
345
+ pyarmor__1(1 , 10 , 5 , ** pyarmor__10)
346
346
347
- 是否重命名属性表达式 obj.attr 中属性名称是个难题,主要有两种情况
347
+ - rft_get_setattr
348
348
349
- - obj 的类型未知
350
- - obj 的类型已知,但是 attr 不存在于 obj 类型的属性表中
349
+ 是否重命名属性表达式 obj.attr 中属性名称是个难题,主要有两种情况
351
350
352
- 因为 obj 的类型可能是动态变化的,所以到底是否重命名 attr 是个难题
351
+ - obj 的类型未知
352
+ - obj 的类型已知,但是 attr 不存在于 obj 类型的属性表中
353
353
354
- 还包括 setattr(obj, 'attr', value) 和 getattr( obj, ' attr') 等形式
354
+ 因为 obj 的类型可能是动态变化的,所以到底是否重命名 attr 是个难题
355
355
356
- 一种解决方案是在脚本中使用 annotation 指定该变量的属性
356
+ 还包括 setattr(obj, 'attr', value) 和 getattr(obj, 'attr') 等形式
357
357
358
- 另外一种解决方案是设置为遇到无法处理的情况下提示用户进行处理::
358
+ 一种解决方案是在脚本中使用 annotation 指定该变量的属性
359
359
360
- $ pyarmor env set rft_option:on_unknown_attr ?
360
+ 另外一种解决方案是设置为遇到无法处理的情况下提示用户进行处理::
361
361
362
- 这样在遇到不可识别的对象类型时候,Pyarmor 提示用户进行处理
362
+ $ pyarmor env set rft_option:on_unknown_attr ?
363
363
364
- - 指定变量的类型
365
- - 不进行命名,所有该对象的其他属性也不进行重命名
366
- - 进行重命名,所有该对象的其他属性也重命名
364
+ 这样在遇到不可识别的对象类型时候,Pyarmor 提示用户进行处理
367
365
368
- - rft_call_rules
366
+ - 指定变量的类型
367
+ - 不进行命名,所有该对象的其他属性也不进行重命名
368
+ - 进行重命名,所有该对象的其他属性也重命名
369
369
370
- 列表,应用于函数调用语句,匹配模式的函数,调用中关键字参数均进行重命名::
370
+ - rft_call_rules
371
371
372
- module:scope:attrs
372
+ 列表,应用于函数调用语句,匹配模式的函数,调用中关键字参数均进行重命名::
373
373
374
- 其中 attrs 可以是如下的格式使用 "." 进行连接:
374
+ module:scope:attrs
375
375
376
- - name
377
- - name()
378
- - name[]
376
+ 其中 attrs 可以是如下的格式使用 "." 进行连接:
379
377
380
- 例如::
378
+ - name
379
+ - name()
380
+ - name[]
381
381
382
- joker.card:Fibo.start:self.runner.run
382
+ 例如::
383
383
384
- - rft_attr_rules
384
+ joker.card:Fibo.start:self.runner.run
385
385
386
- 属性重命名规则,满足模式的属性链表进行重命名,模式的格式和 rft_call_rulers 相同::
386
+ - rft_attr_rules
387
387
388
- module:scope:attrs
388
+ 属性重命名规则,满足模式的属性链表进行重命名,模式的格式和 rft_call_rulers 相同::
389
+
390
+ module:scope:attrs
0 commit comments