YONGFEIUALL

izheyi.com


  • Home

  • Archives

  • Categories

  • Tags

  • About

  • Search

Python-函数

Posted on 2016-03-04 | In Python |

定义函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
    1
    2
    3
    4
    def functionname( parameters ):
    "函数_文档字符串"
    function_suite
    return [expression]

函数参数

  • 必备参数
    必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
  • 默认参数
    设置默认参数时,有几点要注意: 1. 必选参数在前,默认参数在后,否则Python的解释器会报错; 2. 当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
  • 可变参数
    加了星号()的变量名会存放所有未命名的变量参数。args是可变参数,args接收的是一个tuple;

    1
    2
    3
    4
    def functionname([formal_args,] *args ):
    "函数_文档字符串"
    function_suite
    return [expression
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 可写函数说明
    def printinfo( arg1, *vartuple ):
    "打印任何传入的参数"
    print "输出: "
    print arg1
    for var in vartuple:
    print var
    return;

    # 调用printinfo 函数
    printinfo( 10 );
    printinfo( 70, 60, 50 );
Read more »

Python-基础

Posted on 2016-03-02 | In Python |

好处就不罗嗦了,看看市面上招自动化测试的JD里就知道这东东的‘地位’了:)
这里只对它进行一下简单的了解,弄明白是怎么回事。

安装

不做过多介绍,自己去官网下载相应版本安装即可:Python官网
我的是在Windows下安装的,在安装的过程中,记得要“Add Python 3.5 to PATH”,如果安装的时候没做操作,安装完后要手工的添加。

1
2
3
4
C:\Users>python
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

安装成功!

基础语法

行和缩进

Python的代码块不使用大括号({})来控制类,函数以及其他逻辑判断。python最具特色的就是用缩进来写模块。缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。

多行语句

Python语句中一般以新行作为为语句的结束符。但是我们可以使用斜杠( \)将一行的语句分为多行显示。

1
2
3
total = item_one + \
item_two + \
item_three

语句中包含[], {} 或 () 括号就不需要使用多行连接符。

1
2
days = ['Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday']

同一行显示多条语句

Python可以在同一行中使用多条语句,语句之间使用分号(;)分割。

Python 引号

Python 接收单引号(‘ ),双引号(“ ),三引号(‘’’ “””) 来表示字符串,引号的开始与结束必须的相同类型的。其中三引号可以由多行组成,编写多行文本的快捷语法,常用语文档字符串,在文件的特定地点,被当做注释。

Python运算符优先级

数据类型和变量

Python支持多种数据类型,在计算机内部,可以把任何数据都看成一个“对象”,而变量就是在程序中用来指向这些数据对象的,对变量赋值就是把数据和变量给关联起来。
跟其他语言基本没什么差别,整数,浮点数,字符串,布尔值,空值 ====
Note:1. 空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。2. Python的整数没有大小限制。3. 字符串,加号(+)是字符串连接运算符,星号(*)是重复操作。

Read more »

正则表达式入门

Posted on 2016-02-28 | In Automation Testing |

正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。之前知道的很少,也就知道?,*了,工作中用到了,网上教程学习一下,对正则表达式有个基本的了解和使用。

元字符

元字符
^匹配你要用来查找的字符串的开头,$匹配结尾。这两个代码在验证输入的内容时非常有用,比如一个网站如果要求你填写的用户名必须为8位到10位数字时,可以使用:^\d{8,10}$。

如果你想查找元字符本身的话,你就得使用\来取消这些字符的特殊意义

限定符

限定符
下面是一些使用重复的例子:
Windows\d+匹配Windows后面跟1个或更多数字

字符类

要想查找数字,字母或数字,空白是很简单的,因为已经有了对应这些字符集合的元字符,但是如果你想匹配没有预定义元字符的字符集合(比如元音字母a,e,i,o,u),应该怎么办?

很简单,你只需要在方括号里列出它们就行了,像[aeiou]就匹配任何一个英文元音字母,[.?!]匹配标点符号(.或?或!)。

分枝条件

正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。
看例子:
(?0\d{2})?[- ]?\d{8}|0\d{2}[- ]?\d{8}这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔。

Read more »

八达岭长城

Posted on 2016-02-27 | In 丁丁 |

一块去爬了长城,又是陪家里人去的。这次带了小丁,玩的很开心,也不用去上学。

还是很不错的,自己一直爬到了最高点,赞一个!!!




Read more »

java内存泄露分析

Posted on 2016-02-18 | In Performance Testing |

在这里,我们还是先温习一下‘对象气球’:
对象就像一个充满氢气的气球,我们没有办法直接去得到它,要想对它的使用都必须通过一根连着它的绳子来访问,这根绳子就是对象的引用。
一根绳子同时只能连着一个气球,就像一个引用同时只能指向一个对象;
可以用多根绳子同时连接一个气球,也就是可以有多个引用同时指向同一个对象;
如果某个气球没有任何绳子连着它,那它就会飞走,同样,某个对象如果没有引用连接它,它就会成为垃圾,等着被java的垃圾收集器回收;
如果某根绳子没有连接任何气球,那么它就是一个空引用,对它的访问没有意义。
同样,某个引用如果没有指向对象,那么对它的访问将会抛出NullPointerException

Java内存回收机制

Java 的内存管理就是对象的分配和释放问题。分配内存的方式多种多样,取决于该种语言的语法结构。但不论是哪一种语言的内存分配方式,最后都要返回所分配的内存块的起始地址,即返回一个指针到内存块的首地址。在Java 中所有对象都是在堆(Heap)中分配的,对象的创建通常都是采用new或者是反射的方式,但对象释放却有直接的手段,所以对象的回收都是由Java虚拟机通过垃圾收集器去完成的。这种收支两条线的方法确实简化了程序员的工作,但同时也加重了JVM的工作,这也是Java 程序运行速度较慢的原因之一。因为,GC 为了能够正确释放对象,GC 必须监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等,GC 都需要进行监控。监视对象状态是为了更加准确地、及时地释放对象,而释放对象的根本原则就是该对象不再被引用。

JVM垃圾回收

GC类型

  • 新生代的GC
    Minor GC(新生代回收)的触发条件比较简单,Eden空间不足就开始进行Minor GC回收新生代。
  • 老年代GC
    而Full GC(老年代回收,一般伴随一次Minor GC)则有几种触发条件:
    (1)老年代空间不足
    (2)PermSpace空间不足
    (3)统计得到的Minor GC晋升到老年代的平均大小大于老年代的剩余空间

内存类型

  • Java堆内存
  • Perm内存
  • Java进程本地内存

瓶颈分析

定位分析:

  1. 生成堆的dump文件
  2. 分析dump文件
    详细参考文章相关章节:分析

大虾真好吃

Posted on 2016-02-10 | In 丁丁 |



过年去南锣鼓巷

Posted on 2016-02-09 | In 丁丁 |

来北京这么多年,一直说来这看看,终于如愿了,玩的很开心,吃的还不错。
话不多说,上图:)



Read more »

2016新年快乐

Posted on 2016-02-08 | In 丁丁 |

今年过年,由于种种原因,没能回家过年,还蛮遗憾的。新年第一天,出去活动一下,开心每一天。



Read more »

包饺子

Posted on 2016-01-30 | In 丁丁 |

去商场置办年货,正好赶上有包饺子的活动,小丁和妈妈就去参加了。



Read more »

Java线程堆栈分析

Posted on 2016-01-15 | In Performance Testing |

线程堆栈也称作线程调用堆栈。Java线程堆栈是虚拟机中线程(包括锁)状态的一个瞬间快照,即系统在某个时刻所有线程的运行状态,包括每一个线程的调用堆栈,锁的持有情况等信息。

线程堆栈的信息都包含:

  1. 线程的名字,ID,线程的数量等。
  2. 线程的运行状态,锁的状态(锁被哪个线程持有,哪个线程再等待锁等)。
  3. 调用堆栈(即函数的调用层次关系)。调用堆栈包含完整的类名,所执行的方法,源代码的行数。

借助线程堆栈,可以分析许多问题,如线程死锁、锁争用、死循环、识别耗时操作等等。在多线程场合下的稳定性问题分析和性能问题分析,线程堆栈分析是最有效的方法,在多数情况下甚至无需对系统了解就可以进行相应的分析。
线程堆栈最善于分析如下类型的问题:
• 系统无缘无故CPU过高。
• 系统挂起,无响应。
• 系统运行越来越慢。
• 性能瓶颈(如无法充分利用CPU等)
• 线程死锁、死循环,饿死等。
• 由于线程数量太多导致系统失败(如无法创建线程等)。

输出线程状态

Java虚拟机提供了线程转储(Thread dump)的后门,通过这个后门,可以将线程堆栈打印出来。
我们这里拿Linux做例子,写了一个简单的java程序在Linux一直运行着:

  • kill -3 [java pid]
    不会在当前终端输出,它会输出到代码执行的或指定的地方去。比如,kill -3 tomcat pid, 输出堆栈到log目录下。
  • Jstack [java pid]
    这个比较简单,在当前终端显示,也可以重定向到指定文件中。
  • JvisualVM:Thread Dump
    不做说明,打开JvisualVM后,都是界面操作,过程还是很简单的。

解读线程状态

dump的线程信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
"main" prio=10 tid=0x00007f730c008800 nid=0x63eb runnable [0x00007f73117c6000]
java.lang.Thread.State: RUNNABLE
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:345)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
- locked <0x00000000cc407ab8> (a java.io.BufferedOutputStream)
at java.io.PrintStream.write(PrintStream.java:482)
- locked <0x00000000cc407a98> (a java.io.PrintStream)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)
- locked <0x00000000cc407b90> (a java.io.OutputStreamWriter)
at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)
at java.io.PrintStream.newLine(PrintStream.java:546)
- eliminated <0x00000000cc407a98> (a java.io.PrintStream)
at java.io.PrintStream.println(PrintStream.java:737)
- locked <0x00000000cc407a98> (a java.io.PrintStream)
at test.fun2(test.java:19)
at test.fun1(test.java:12)
at test.main(test.java:6)

线程堆栈里面的最直观的信息是当前线程的调用上下文,即从哪个函数中调用到哪个函数中(从下往上看),正执行到哪个类的哪一行.

Read more »
1…242526…40
唐胡璐

唐胡璐

i just wanna live while i am alive

393 posts
42 categories
74 tags
RSS
LinkedIn Weibo GitHub E-Mail
Creative Commons
© 2022 唐胡璐
Powered by Hexo
|
Theme — NexT.Pisces v5.1.4