当前位置: 首页 > 编程日记 > 正文

ABAP性能实例七例

一、SQL Interface

1.Select ... Where vs. Select + Check

用Select … Where语句效率比Select + Check语句要高,例如:

SELECT * FROM SBOOK INTO SBOOK_WA

WHERE CARRID = 'LH' AND

CONNID = '0400'.

ENDSELECT.

SELECT * FROM SBOOK INTO SBOOK_WA.

CHECK: SBOOK_WA-CARRID = 'LH' AND

SBOOK_WA-CONNID = '0400'.

ENDSELECT.

2.Test Existence

检查满足某个(些)条件的记录是否存在时,使用Select Single效率最高;例如:

SELECT SINGLE * FROM SBOOK

WHERE CARRID = 'LH'.

SELECT * FROM SBOOK INTO SBOOK_WA

WHERE CARRID = 'LH'.

EXIT.

ENDSELECT.

3.Select aggregates

需要对数据库某列求最大,最小,和,平均值或者记录数量时,请使用聚集函数来代替Select … Where + Check的方法,这样效率高而且网络流量小。

DATA: MAX_MSGNR type t100-msgnr.

SELECT MAX( MSGNR ) FROM T100 INTO max_msgnr

WHERE SPRSL = 'D' AND

ARBGB = '00'.

4.Select with select list

取数时请使用Select + 指定的列名称 into,而不要使用Select * into。显示的指定列名称只取出需要的列,不会像Select *会取出相应表的所有的列。

SELECT DOMNAME FROM DD01L

INTO DD01L_WA-DOMNAME

WHERE DOMNAME LIKE 'CHAR%'

AND AS4LOCAL = 'A'.

ENDSELECT.

SELECT * FROM DD01L INTO DD01L_WA

WHERE DOMNAME LIKE 'CHAR%'

AND AS4LOCAL = 'A'.

ENDSELECT.

5.Column Update

尽可能的使用字段(column updates)更新来代替行记录(single-row updates)更新数据库表,这样可以减少网络负载。

UPDATE SFLIGHT

SET SEATSOCC = SEATSOCC - 1.

6.Index and Buffer Support

6.1.Select with index support

Select语句在Where条件中尽量使用索引字段

6.2.Select with buffer support

对于最常用的只读的数据读取,使用SAP Buffering,不要使用BYPASSING BUFFER,例如:

SELECT SINGLE * FROM T100 INTO T100_WA

BYPASSING BUFFER

WHERE SPRSL = 'D'

AND ARBGB = '00'

AND MSGNR = '999'.

7.Array Operations (internal tables)

7.1.Select ... Into Table t

使用Into Table版本的Select 语句要比使用 Append 的方式速度更快,例如:

SELECT * FROM T006 INTO TABLE X006.

DATA T006_WA TYPE T006.

CLEAR X006.

SELECT * FROM T006 INTO T006_WA.

APPEND T006_WA TO X006.

ENDSELECT.

7.2.Array Insert VS Single-row Insert

向数据库中插入数据时,使用内表代替单行操作,减少应用服务与数据库的交互次数,能够有效地减少系统负荷。

INSERT CUSTOMERS FROM TABLE TAB.

LOOP AT TAB INTO TAB_WA.

INSERT INTO CUSTOMERS VALUES TAB_WA.

ENDLOOP.

7.3.Select-Endselect vs. Array-Select

对于只需要使用一次的数据,使用Select-Endselect-loop来代替Select Into Table。内表需要更多的内存空间。例如:

SELECT * FROM T006 INTO X006_WA.

ENDSELECT.

SELECT * FROM T006

INTO TABLE X006.

LOOP AT X006 INTO X006_WA.

ENDLOOP.

注:个人认为还是取出数据到内表的方式要好,牺牲存储空间,换取时间上的性能。

二、Context

1.Supply/Demand vs. SELECT

三、Internal Tables

1. Using explicit work areas(显示的使用工作区)

显示的指定工作区可以避免不必要的Move操作。见下列内表操作的语句:

APPEND wa TO itab. INSERT wa INTO itab. COLLECT wa INTO itab. MODIFY itab FROM wa. READ TABLE itab INTO wa. LOOP AT itab INTO wa.

ITAB = WA.

APPEND ITAB.

2.Linear search vs. binary search

如果内表的数据超过20条,由于线性检索会遍历整个内表,这将会非常耗时。将内表排序并使用Binary Search,或者使用SORTED TABLE类型的内表。如果内表有n条记录,线性查找的次数为O( n ),Binary Search的查找次数为O( log2( n ) ).

READ TABLE ITAB INTO WA WITH KEY K = 'X'

BINARY SEARCH.

READ TABLE ITAB INTO WA

WITH KEY K = 'X'.

3.Dynamic vs. static key access

动态键值的读取比静态键值的读取要慢,

READ TABLE ITAB INTO WA

WITH KEY K = 'X'.

READ TABLE ITAB INTO WA

WITH KEY (NAME) = 'X'.

4.Secondary indices

If you need to access an internal table with different keys repeatedly, keep your own secondary indices. With a secondary index, you can replace a linear search with a binary search plus an index access.

READ TABLE SEC_IDX INTO SEC_IDX_WA

WITH KEY DATE = SY-DATUM

BINARY SEARCH.

IF SY-SUBRC = 0.

READ TABLE ITAB INTO WA

INDEX SEC_IDX_WA-INDX.

" ...

ENDIF.

READ TABLE ITAB INTO WA

WITH KEY DATE = SY-DATUM.

IF SY-SUBRC = 0.

" ...

ENDIF.

5.Key access to multiple lines

LOOP ... WHERE比 LOOP/CHECK更快,因为LOOP ... WHERE只处理满足特定条件的数据。如果LOOP ... WHERE和FROM i1 and/or TO i2条件一起使用,性能会更好。

LOOP AT ITAB INTO WA WHERE K = 'X'.

" ...

ENDLOOP.

LOOP AT ITAB INTO WA.

CHECK WA-K = 'X'.

" ...

ENDLOOP.

6.Sorted and Hashed Tables

6.1.Single Read: Sorted vs. hashed tables

数据在SORTED TABLE类型的内表中按照Binary Search方式组织,检索数据的时间维度为(O (log n))。

数据在HASDED TABLE类型内表中按照hash-algorithm组织,检索数据的时间维度为(O (1))。

HASHED TABLE为单条记录的存取进行了优化,它没有索引(index),而SORTED TABLE优化为loop操作的部分顺序数据的存取。

DO 250 TIMES.

N = 4 * SY-INDEX.

READ TABLE HTAB INTO WA WITH TABLE KEY K = N.

IF SY-SUBRC = 0.

" ...

ENDIF.

ENDDO.

DO 250 TIMES.

N = 4 * SY-INDEX.

READ TABLE STAB INTO WA WITH KEY K = N.

IF SY-SUBRC = 0.

" ...

ENDIF.

ENDDO.

注:根据实测,Hashed Table的Read Table操作比Sorted Table + Binary Search大约快1倍。

6.2.Part. seq. access: Hashed vs. sorted

Hashed tables优化为单条记录的存取,数据在内表中没有特定的顺序,内表没有索引(sy-tabix),而且它必须是UNIQUE KEY。

SORTED TABLE内表中数据按照Key字段升序排序。

LOOP AT STAB INTO WA WHERE K = SUBKEY.

" ...

ENDLOOP.

LOOP AT HTAB INTO WA WHERE K = SUBKEY.

" ...

ENDLOOP.

7.Building unique standard tables(如何建立有唯一主键的标准内表)

如果内表的记录数量较少(<20),或者在填充内表的同时你需要访问它,那么使用Read/Insert比较合适。但是,如果你内表数据量很大,并且你只需要读取已经填充的内表,那么使用后面三步法。

REFRESH ITAB2.

LOOP AT ITAB1 INTO WA.

READ TABLE ITAB2 WITH KEY K = WA-K

BINARY SEARCH

TRANSPORTING NO FIELDS.

IF SY-SUBRC <> 0.

INSERT WA INTO ITAB2

INDEX SY-TABIX.

ENDIF.

ENDLOOP.

ITAB2[] = ITAB1[].

SORT ITAB2 BY K.

DELETE ADJACENT DUPLICATES FROM ITAB2

COMPARING K.

8.Building unique sorted/hashed tables

9.Modifying single lines

使用"MODIFY itab ... TRANSPORTING f1 f2 ..."语句更新一个内表的行可以提高效率,内表的table line越长,那么效率提高越多。该语句对于拥有复杂行类型的内表效率提升最明显。

WA-DATE = SY-DATUM.

MODIFY ITAB FROM WA INDEX 1.

WA-DATE = SY-DATUM.

MODIFY ITAB FROM WA INDEX 1 TRANSPORTING DATE.

10.Using the Assigning Comand

10.1.Modifying a set of lines directly(批量修改内表数据)

使用"LOOP ... ASSIGNING ..."可以直接修改内表中的数据,而不需要先将内表数据复制到相应工作区,然后再更新回去。

LOOP AT ITAB INTO WA.

I = SY-TABIX MOD 2.

IF I = 0.

WA-FLAG = 'X'.

MODIFY ITAB FROM WA.

ENDIF.

ENDLOOP.

Field-Symboles:<WA> like ITAB.

LOOP AT ITAB ASSIGNING <WA>.

I = SY-TABIX MOD 2.

IF I = 0.

<WA>-FLAG = 'X'.

ENDIF.

ENDLOOP.

10.2.Filling nested internal tables(填充嵌套的内表)

采用自底向上的策略填充嵌套内表,需要多付出很多次move操作的时间,嵌套中内部inner内表的内容会被moved到上一层的数据结构中。

相反,采用自顶向下的策略,首先填充外部outer内表,再采用"LOOP ... ASSIGNING"可以直接更新内部内表,这样,inner tables的内容只会被移动一次。

DO 50 TIMES.

CLEAR WA.

DO 10 TIMES.

APPEND N TO WA-INTTAB.

ADD 1 TO N.

ENDDO.

APPEND WA TO ITAB.

ENDDO.

DO 50 TIMES.

APPEND INITIAL LINE TO ITAB.

ENDDO.

LOOP AT ITAB ASSIGNING <F>.

DO 10 TIMES.

APPEND N TO <F>-INTTAB.

ADD 1 TO N.

ENDDO.

ENDLOOP.

11.Building condensed tables

COLLECT使用一种HASH算法,因此它不依赖内表的记录数而且不需要维护表索引sy-tabix,如果你需要最终的内表是排序的,那么在所有数据都Collect完以后再排序内表。

如果内表的记录数量较少,可以使用READ/INSERT的方法,也可以取得较好的效率,但是如果数据量大于1000,那么还是使用Collect效率更好些。

注意:在使用Collect填充一个内表时,不要混合使用其他操作内表的语句,例如 (APPEND, INSERT, MODIFY, SELECT * INTO TABLE and/or SELECT * APPENDING TABLE)。如果你将Collect与这些语句混合使用操作操作内表,那么Collect就不会使用HASH算法,在这种情况下,COLLECT会重新排序为一个普通的线性搜索,性能会显著的降低为O(n).

LOOP AT ITAB1 INTO WA1.

READ TABLE ITAB2 INTO WA2 WITH KEY K = WA1-K BINARY SEARCH.

IF SY-SUBRC = 0.

ADD: WA1-VAL1 TO WA2-VAL1,

WA1-VAL2 TO WA2-VAL2.

MODIFY ITAB2 FROM WA2 INDEX SY-TABIX TRANSPORTING VAL1 VAL2.

ELSE.

INSERT WA1 INTO ITAB2 INDEX SY-TABIX.

ENDIF.

ENDLOOP.

LOOP AT ITAB1 INTO WA.

COLLECT WA INTO ITAB2.

ENDLOOP.

SORT ITAB2 BY K.

12. Array Operations

12.1. Appending tables

使用"APPEND LINES OF itab1 TO itab2" 将itab1的所有行添加到内表itab2。

LOOP AT ITAB1 INTO WA.

APPEND WA TO ITAB2.

ENDLOOP.

APPEND LINES OF ITAB1 TO ITAB2.

12.2.Inserting tables

使用"INSERT LINES OF itab1 INTO itab2 INDEX idx" 语句将内表itab1从内表itab2的索引idx处插入。 I = 250.

LOOP AT ITAB1 INTO WA.

INSERT WA INTO ITAB2 INDEX I.

ADD 1 TO I.

ENDLOOP.

I = 250.

INSERT LINES OF ITAB1 INTO ITAB2

INDEX I.

12.3.Deleting duplicates(删除内表中重复的记录)

使用 "DELETE ADJACENT DUPLICATES" 语句删除重复记录。

READ TABLE ITAB INDEX 1 INTO PREV_LINE.

LOOP AT ITAB FROM 2 INTO WA.

IF WA = PREV_LINE.

DELETE ITAB.

ELSE.

PREV_LINE = WA.

ENDIF.

ENDLOOP.

DELETE ADJACENT DUPLICATES FROM ITAB

COMPARING K.

12.4.Deleting a sequence of lines(删除内表中连续的数据)

使用 "DELETE itab FROM ... TO ..." 删除一批连续数据。

DO 101 TIMES.

DELETE ITAB INDEX 450.

ENDDO.

DELETE ITAB FROM 450 TO 550.

12.5.Copying internal tables(内表复制)

内表可以像其他对象一样,使用MOVE语句进行内表的复制。

如果内表有Header Line,那么使用itab[]存取内表。

REFRESH ITAB2.

LOOP AT ITAB1 INTO WA.

APPEND WA TO ITAB2.

ENDLOOP.

ITAB2[] = ITAB1[].

12.6.Comparing internal tables(内表比较)

内表可以像其他对象一样在逻辑表达式中进行比较,如果两个内表相同,那么它们:

- 有相同的行记录数量

- 每对相应的行相同

如果内表有Header Line,那么可以使用itab[]方式访问内表本身。

DESCRIBE TABLE: ITAB1 LINES L1,

ITAB2 LINES L2.

IF L1 <> L2.

TAB_DIFFERENT = 'X'.

ELSE.

TAB_DIFFERENT = SPACE.

LOOP AT ITAB1 INTO WA1.

READ TABLE ITAB2 INTO WA2 INDEX SY-TABIX.

IF WA1 <> WA2.

TAB_DIFFERENT = 'X'. EXIT.

ENDIF.

ENDLOOP.

ENDIF.

IF TAB_DIFFERENT = SPACE.

" ...

ENDIF.

IF ITAB1[] = ITAB2[].

" ...

ENDIF.

13.Sorting internal tables

内表中指定的排序键限制越严格,程序运行得就越快。所以,尽可能的指定约束越多的排序键值。

SORT ITAB.

SORT ITAB BY K.

14.Simple Algorithms

14.1.Joining internal tables(内表连接Join)

如果ITAB1有n1条记录,ITAB2有n2条记录, 那么straightforward算法连接ITAB1和ITAB2需要O( n1 * log2( n2 ) )次运算,而parallel cursor approach仅需要O( n1 + n2 ) 次运算。 parallel cursor算法假定ITAB2为从表且只包含在主表ITAB1中才有的记录. If this assumption does not hold, the parallel cursor algorithm gets slightly more complicated, but its performance characteristics remain the same.

LOOP AT ITAB1 INTO WA1.

READ TABLE ITAB2 INTO WA2

WITH KEY K = WA1-K BINARY SEARCH.

IF SY-SUBRC = 0.

" ...

ENDIF.

ENDLOOP.

<Naive join>

DATA: I TYPE I.

I = 1.

LOOP AT ITAB1 INTO WA1.

READ TABLE ITAB2 INTO WA2 INDEX I.

IF SY-SUBRC <> 0. EXIT. ENDIF.

IF WA2-K = WA1-K.

" ...

ENDIF.

ENDLOOP.

注:经过本人测试,这段程序是错误的,不能成立,不知道正确的应该如何。

<More sophisticated: use parallel cursors>

14.2.Nested loops

如果ITAB1有n1条记录,ITAB2有n2条记录,那么嵌套loop的straightforward算法需要的时间为O(n1 * n2),而parallel cursor approach 需要的时间是O(n1 + n2).

parallel cursor算法假定 ITAB2仅包含ITAB1才有的记录。如果假定不成立, parallel cursor算法显得比较复杂,但是性能特性却保持不变。

LOOP AT ITAB1 INTO WA1.

LOOP AT ITAB2 INTO WA2

WHERE K = WA1-K.

" ...

ENDLOOP.

ENDLOOP.

<Straightforward nested loop>

I = 1.

LOOP AT ITAB1 INTO WA1.

LOOP AT ITAB2 INTO WA2 FROM I.

IF WA2-K <> WA1-K.

I = SY-TABIX.

EXIT.

ENDIF.

" ...

ENDLOOP.

ENDLOOP.

< More sophisticated loop: parallel cursors >

14.3.Intersection of internal tables

数据源表 ITAB1 和ITAB2都是STANDARD TABLES,假定ITAB1比ITAB2包含更多的记录。 否则,需要使用 "DESCRIBE TABLE ... LINES ..."语句计算内表包含的记录数。假定2个内表中的记录都遵从主键K唯一。

算法在计算中需要使用一个有唯一主键K的临时内表,该内表是ITAB1数据的复制,匹配的数据被复制到ITAB3,以下两个示例的区别在于临时内表分别为SORTED TABLE和HASHED TABLE,对于LOOP中的READ语句,HASHED TABLE比SORTED TABLE更快。

STAB1 = ITAB1.
REFRESH ITAB3.
LOOP AT ITAB2 ASSIGNING
<WA>.
READ TABLE STAB1 FROM
<WA>
TRANSPORTING NO FIELDS.
IF SY
-SUBRC = 0.
APPEND
<WA> TO ITAB3.
ENDIF.
ENDLOOP.
FREE STAB1.
<Using a sorted table temporarily >

HTAB1
= ITAB1.
REFRESH ITAB3.
LOOP AT ITAB2 ASSIGNING
<WA>.
READ TABLE HTAB1 FROM
<WA>
TRANSPORTING NO FIELDS.
IF SY
-SUBRC = 0.
APPEND
<WA> TO ITAB3.
ENDIF.
ENDLOOP.
FREE HTAB1.
<Using a hashed table temporarily>

四、Typing

1.Typed vs. untyped Parameters<类型化与非类型化参数>

如果你在源程序中指定了参数的类型,那么ABAP/4编译器能够彻底的对代码进行优化。另外,使用错误顺序参数的风险更少。

PERFORM UP1 USING 10 M6-DIMID M6-ZAEHL M6-ISOCODE M6-ANDEC M6-PRIMARY.
FORM UP1 USING
REPEAT
DIMID
ZAEHL
ISOCODE
ANDEC
PRIMARY.
* Identical source code left and right:
DO REPEAT TIMES.
T006_WA
-DIMID = DIMID.
T006_WA
-ZAEHL = ZAEHL.
T006_WA
-ISOCODE = ISOCODE.
T006_WA
-ANDEC = ANDEC.
T006_WA
-PRIMARY = PRIMARY.
ENDDO.
ENDFORM.
PERFORM UP2 USING
10 M6-DIMID M6-ZAEHL M6-ISOCODE M6-ANDEC M6-PRIMARY.
FORM UP2 USING
REPEAT TYPE I
DIMID LIKE T006
-DIMID
ZAEHL LIKE T006
-ZAEHL
ISOCODE LIKE T006
-ISOCODE
ANDEC LIKE T006
-ANDEC
PRIMARY LIKE T006
-PRIMARY.
* Identical source code left and right:
DO REPEAT TIMES.
T006_WA
-DIMID = DIMID.
T006_WA
-ZAEHL = ZAEHL.
T006_WA
-ISOCODE = ISOCODE.
T006_WA
-ANDEC = ANDEC.
T006_WA
-PRIMARY = PRIMARY.
ENDDO.
ENDFORM.

2.Typed vs untyped Field-Symbols

如果你在源程序中指定了类型化的field-symbols,那么ABAP/4编译器能够更好的对代码进行优化

FIELD-SYMBOLS: <F> TYPE ANY.
DATA: I1 TYPE I, I2 TYPE I.
ASSIGN I1 TO
<F>.
I2
= <F>.
FIELD
-SYMBOLS: <I> TYPE I.
DATA: I1 TYPE I, I2 TYPE I.
ASSIGN I1 TO
<I>.
I2
= <I>.

五、If, Case……

1.If vs. Case

Case语句比IF语句更清晰并且稍微快些

2.Comparison of I and C

C和C类型比较 比 C与I比较的速度更快

3.While vs. Do

While语句比Do-Exit语句更容易理解,并且执行的更快

4.Case vs. Perform i Of ...

六、Field Conversion

1.Field Types I and P

在需要使用整数的时候(例如SY-TABIX)使用I类型

2.Literals Type C and Type I

3.Constants Type F

使用正确类型的常量.

DATA:

FLOAT TYPE F.

FLOAT = '3.1415926535897932'.

CONSTANTS:

PI TYPE F VALUE '3.1415926535897932'.

DATA:

FLOAT TYPE F.

FLOAT = PI.

4.Arithmetic

在算术运算的时候使用数字类型变量。类型N仅仅用在不需要计算的纯数字字符串中,例如:电话号码,日期或时间的部分内容。

DATA:

N1(15) TYPE N VALUE '123456789012345',

N2(15) TYPE N VALUE '543210987654321',

N3(15) TYPE N.

N3 = N1 + N2.

DATA:

P1 TYPE P VALUE '123456789012345',

P2 TYPE P VALUE '543210987654321',

P3 TYPE P.

P3 = P1 + P2.

5.Mixed Types

不要混合使用数据类型,除非绝对必要。

DATA: F1 TYPE I VALUE 2,

F2 TYPE P DECIMALS 2 VALUE '3.14',

F3 TYPE F.

F3 = F1 * F2.

DATA: F1 TYPE F VALUE 2,

F2 TYPE F VALUE '3.14',

F3 TYPE F.

F3 = F1 * F2.

七、Character/String Manipulation

1.fixed and unfixed length strings

字符串连接运算Concatenate需要扫描固定长度字符(fixed character fields)从第一个非空字符到最后。由于依赖于字符字段的长度,字符串string操作可能更快些。

*data c1(200) type c.

*data c2(200) type c.

*data c3(400) type c.

c1 = 'mysap'.

c2 = '.com'.

concatenate c1 c2 into c3.

*data string1 type string.

*data string2 type string.

*data string3 type string.

string1 = 'mysap'.

string2 = '.com'.

concatenate string1 string2 into string3.

八、ABAP Objects

1.Methods vs Subroutines

调用本地方法PERORM和调用本地子程序CALL性能上没有差异。

2.Methods vs Function Modules

调用全局类(Global Classes)比调用Function Modules要快

call function 'FUNCTION1'.

call method CL_PERFORMANCE_TEST=>M1.

3.Local Methods vs global Methods

调用全局方法不比调用本地方法要慢多少.

call method C1=>M1. “Local

call method CL_PERFORMANCE_TEST=>M1. “Global

转载于:https://www.cnblogs.com/hanmos/archive/2013/03/05/2943999.html

相关文章:

C语言中打印‘%’

C语言中打印‘%’不能直接printf("%")&#xff0c;这里的%有特殊含义的&#xff0c;要想打印的话&#xff0c;需要输入printf("%%")&#xff0c;两个%才可以将它打印出来。C语言中的其他的特殊字符&#xff0c;以后再慢慢做整理。

vba 字体颜色_多掌握一些VBA语句,让自己书写代码更加顺畅

VBA 是好东西&#xff0c;对于身在职场的人员&#xff0c;或者是积极打拼的创业者&#xff0c;是数据分析的首选&#xff0c;他可以实现量身定做&#xff0c;解决一些规律性强的问题。或者代替人处理一些可以描述出有逻辑关系的数据分析。多掌握一些VBA语句&#xff0c;让自己书…

编写jQueryUI插件(widget)

使用jQueryUI的widget来写插件&#xff0c;相比于基本的jquery插件有一些好处&#xff1a; * 方便实现继承&#xff0c;代码重用 * 默认是单例 * widget已经给你实现好的一些常用方法&#xff0c;例如destroy 带来好处的同时也带来了荆棘和陷阱&#xff0c;本文的目的就是梳理这…

mail 发送email

&#xff08;一&#xff09;首先安装ssmpt和mailutils&#xff1a; sudo apt-get install ssmtp mailutils &#xff08;二&#xff09;接下来编辑配置文件sudo gedit /etc/ssmtp/ssmtp.conf rootYOUR_PERSONAL_MAILDOMAIN mailhubsmtp.gmail.com:465 rewriteDomaingmail.com A…

C语言中字符型在计算机中的存储

一. 字符型的分类和表示范围 char&#xff1a;是有符号还是无符号数视编译器而定&#xff0c;一般为有符号数&#xff0c;下文把它全部当成有符号数进行讨论 表示范围&#xff1a;32位和64位机器上均是一个字节&#xff0c;所以是八个bit位&#xff0c;最高位为符号位之后&…

python中正确的表达式_python中如何正确使用正则表达式的详细模式(Verbose mode expression)...

简单介绍正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具&#xff0c;拥有自己独特的语法以及一个独立的处理引擎&#xff0c;效率上可能不如str自带的方法&#xff0c;但功能十分强大。得益于这一点&#xff0c;在提供了正则表达式的语言里&#xff0c…

ASP.NET中 RequiredFieldValidator(非空验证)的使用

ylbtech-ASP.NET-Control-Validator: RequiredFieldValidator(非空验证)的使用ASP.NET中 RequiredFieldValidator(非空验证)的使用。 1.A,运行效果返回顶部 登录 RequiredFieldValidator&#xff1a;非空验证重要的属性&#xff1a;1,ControlToValidate&#xff1a;要验证的控件…

5013.FortiGate企业级硬件防火墙Demo演示文档

FortiGate企业级硬件防火墙Demo演示文档 语言&#xff1a;英文类型&#xff1a;Demo大小&#xff1a;2MB格式&#xff1a;WEB摘要&#xff1a;和真实的硬件防火墙操作界面一模一样的&#xff0c;非常实用&#xff01;可以通过这些界面了解到在配置硬件防火墙时需要配置哪些参数…

下拉列表JComboBox,列表框JList

1、下拉列表JComboBox public class Demo extends JFrame {public Demo() {setBounds(100, 100, 200, 100);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);Container c getContentPane();c.setLayout(new FlowLayout()); // JComboBox cbbnew JComboBox();…

C语言中整型在计算机中的存储

一 . 整型的表示 1.字面值后面加上L(l)表示long长整型 2.字面值后面加上U(u)表示usigned整型值 3.十进制123 ... 4.八进制&#xff0c;以0开头&#xff0c;如0123&#xff0c;0754 ... 5.十六进制&#xff0c;以0x开头&#xff0c;如0xF32 ... 二 .整型的分类和表示范围 ch…

多个前端项目放在一个git好还是_前端工作流

没有规矩不成方圆&#xff0c;如果一个项目只有你一个人在维护&#xff0c;那么你不需要担心很多问题&#xff0c;因为你对它心知肚明&#xff0c;但同时一个人的力量无法支撑起来大型项目。更多时候&#xff0c;我们需要与其他人合作&#xff0c;共同把项目推进&#xff0c;这…

hadoop上的pageRank算法

简单的pageRank实现参考&#xff1a;http://wlh0706-163-com.iteye.com/blog/1397694 较为复杂的PR值计算以及在hadoop上的实现&#xff1a;http://deathspeeder.is-programmer.com/posts/31349.html pageRank算法的基本思想是&#xff1a;网页的热门程度依赖指向它的网页的热门…

【11平台天梯】【原理分析】11平台天梯原理分析

写作缘由 (Elo Ratings) ELO排名制度是当今对弈水平评估的公认的权威方法。它最初由物理学教授 Arpad Elo 创立&#xff0c;故命名为埃罗排名。埃罗排名最早应用于国际象棋和围棋&#xff0c;目前已广泛用于国际象棋、围棋、足球、篮球等运动。ELO算法先是在网游WOW取得了成功&…

PAT Basic 1072

1072 开学寄语 下图是上海某校的新学期开学寄语&#xff1a;天将降大任于斯人也&#xff0c;必先删其微博&#xff0c;卸其 QQ&#xff0c;封其电脑&#xff0c;夺其手机&#xff0c;收其 ipad&#xff0c;断其 wifi&#xff0c;使其百无聊赖&#xff0c;然后&#xff0c;净面、…

C语言中浮点型在计算机中的存储

一 . 浮点型的存储 在十进制中我们都学习过科学计数法&#xff0c;比如31.4可以用科学计数法表示就是3.14*10^1。浮点型同样是采取科学计数法进行表示的。在计算机中&#xff0c;以二进制数存储&#xff0c;如1011.10用科学计数法的方式可以写成1.01110*2^3&#xff0c;因为浮点…

object-c中管理文件和目录:NSFileManager使用方法

object&#xff0d;c中管理文件和目录&#xff1a;NSFileManager使用方法 对于NSFileManager&#xff0c;文件或目录是使用文件的路径名唯一标识的。每一个路径名都是一个NSString对象&#xff0c;它可以是相对路径名&#xff0c;也可以是完整路径名。 相对路径名是相对于当前目…

python实现ssh登录send_Python实现ssh批量登录并执行命令

局域网内有一百多台电脑&#xff0c;全部都是linux操作系统&#xff0c;所有电脑配置相同&#xff0c;系统完全相同(包括用户名和密码)&#xff0c;ip地址是自动分配的。现在有个任务是在这些电脑上执行某些命令&#xff0c;者说进行某些操作&#xff0c;比如安装某些软件&…

传Exchange 15将于今年9月发布

Microsoft Exchange Conference &#xff08;简称MEC&#xff09;是微软公司所举办的有关Exchange Server软件的主题会议&#xff0c;但它在过去的十年间一直没有举行。今年的9月24-26日&#xff0c;微软将在佛罗里达州重新启动MEC并展示Exchange 15。根据ZDNet报道&#xff0c…

Django进阶之session

基于cookie做用户验证时&#xff1a;敏感信息不适合放在cookie中 session依赖cookie session原理 cookie是保存在用户浏览器端的键值对 session是保存在服务器端的键值对 session服务端中存在的数据为&#xff1a; session {随机字符串1&#xff1a;{用户1的相关信息}随机字符…

python画美女代码_教你用python爬取网站美女图(附代码及教程)

我前几篇文章都是说一些python爬虫库的用法&#xff0c;还没有说怎样利用好这些知识玩一些好玩的东西。那我今天带大家玩好玩又刺激的&#xff0c;嘻嘻&#xff01;对了&#xff0c;requests库和正则表达式很重要的&#xff0c;一定要学会&#xff01;一定要学会&#xff01;&a…

Python基础学习3

6 模块和包 (1) 命名以.py结尾的文件就是Python模块 Python的包就是一个文件夹&#xff0c;至少有还有一个__init__.py的文件 包中可以有文件夹&#xff0c;文件夹中可以有包 (2) 文件的导入 每使用一个变量名或者函数时&#xff0c;就需要导入另一个文件 例&#…

CSS伪类 选择器

一、伪类:active/*被激活的元素*/:focus/*拥有键盘输入焦点的元素*/ :hover/*鼠标悬浮在元素上方时*/ :link/*未被访问的链接*/ :visited/*已被访问的链接*/ :first-child/*元素的第一个子元素*/ :lang/*带有指定 lang 属性的元素*/ CSS执行顺序是&#xff1a;lvcha link :hove…

svn中的revert和update

svn中的revert和update今天有人问到revert和update的问题。刚开始还真被问住了。因为感觉revert和update都可以将本地的copy更新到以前的一个版本&#xff0c;会有什么不同呢&#xff1f;查了些资料&#xff0c;并做了个试验&#xff0c;终于发现了它们的不同。假设当前最新的版…

BOM 浏览器对象模型和DOM 文档对象模型

浏览器对象模型BOM 1. 浏览器对象模型介绍 BOM(Browser Object Model) 是指浏览器对象模型&#xff0c;是用于描述这种对象与对象之间层次关系的模型&#xff0c;浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。BOM由多个对象组成&#xff0c;其中代表…

上交三月月赛[SJTU] 1106 sudoku

题目大意&#xff1a;给出一道数独题&#xff0c;判断该数独是否有解且有唯一解。 解题思路&#xff1a; 由前几题的难度得&#xff0c;此题的难度不会太过分&#xff0c;所以简单暴力就可以了&#xff0c;40ms用时一本满足。 简单地讲一下具体的实现&#xff0c;从左上开始从左…

C语言-三子棋游戏

C语言中用写头文件的方式写了一个三子棋游戏 1.测试函数text.c #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #include"chess.h"void menu() {printf("*************…

取余运算怎么算_TensorFlow2.0(2):数学运算

点击“机器学习算法与Python实战”&#xff0c;“置顶”公众号重磅干货&#xff0c;第一时间送达TensorFlow2.0(1)&#xff1a;基本数据结构——张量1 基本运算&#xff1a;(、-、*、/、//、%) 基本运算中所有实例都以下面的张量a、b为例进行&#xff1a;import tensorflow as …

xen二进制安装

需要几台机器做集群测试,目前只有一台机器所以用xen来虚拟化几台机器出来 系统: centos5.6 安装xen yum install kernel-xen xen修改grub /boot/grub/grub.conf将default1改为default0 default0 timeout5 splashimage(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.…

python模块之json,pickle

序列化是指把内存里的数据转变成字符串&#xff0c;以使其能保存到硬盘上或者通过网络输送到远程。 序列化的两个模块&#xff1a; json:只能把python中的int/str/list/tuple/dict类型的数据&#xff0c;可以在不同的语言之间传递数据。Python和JavaScript数据对应关系&#xf…

关于如何在pc端使用github

http://www.bcwhy.com/thread-17636-1-1.html转载于:https://www.cnblogs.com/glgl2424/archive/2013/03/13/2956944.html