Python 基础语法知识二

以下语法基于Python 3.1

. 函数默认值

Python函数默认值的使用可以在函数调用时写代码提供方便,很多时候我们只要使用默认值就可以了。所以函数默认值在python中用到的很多,尤其是在类中间,类的初始化函数中一帮都会用到默认值。使用类时能够方便的创建类,而不需要传递一堆参数。

只要在函数参数名后面加上 '=defalut_value',函数默认值就定义好了。有一个地方需要注意的是,有默认值的参数必须在函数参数列表的最后,不允许将没有默认值的参数放在有默认值的参数后,因为如果你那样定义的话,解释器将不知道如何去传递参数。

示例:

def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):

flag=True

while flag:

ok = input(prompt)

print(ok)

if ok in ('y', 'yes'):

flag=True

if ok in ('n', 'no'):

flag=False

retries = retries - 1

if retries < 0:

raise IOError

'refusenik user'

print(complaint)

ask_ok('please type in the status(yes/no):')

. 使用函数默认值来实现函数静态变量的功能

Python中是不支持静态变量的,但是我们可以通过函数的默认值来实现静态变量的功能。

当函数的默认值是内容是可变的类时,类的内容可变,而类的名字没变。(相当于开辟的内存区域没有变,而其中内容可以变化)。

这是因为python中函数的默认值只会被执行一次,和静态变量一样,静态变量初始化也是被执行一次。

看下面的程序片段:

def f(a, L=[]):

L.append(a)

return L

print(f(1))

print(f(2))

print(f(3))

print(f(4,['x']))

print(f(5))

输出:

>>>

[1]

[1, 2]

[1, 2, 3]

['x', 4]

[1, 2, 3, 5]

>>>

最后 “print f(5)”的输出是 “[1, 2, 3, 5],因为 “print f(4,['x'])”时,默认变量并没有被改变,因为默认变量的初始化只是被执行了一次(第一次使用默认值调用),初始化执行开辟的内存区(我们可以称之为默认变量)没有被改变,所以最后的输出结果是“[1, 2, 3, 5]”。

. 多线程

python是支持多线程的,并且是native的线程。主要是通过threadthreading这两个模块来实现的。

pythonthread模块是比较底层的模块,pythonthreading模块是对thread做了一些包装的,可以更加方便的被使用。

threading模块里面主要是对一些线程的操作对象化了,创建了叫Threadclass

一般来说,使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里。

3.1 Python thread实现多线程

#-*- encoding: gb2312 -*-

import string, threading, time

def thread_main(a):

global count, mutex

# 获得线程名

threadname = threading.currentThread().getName()

for x in range(0, int(a)):

# 取得锁

mutex.acquire()

count = count + 1

# 释放锁

mutex.release()

print('threadname: %s,threadnum:%d,threadcount:%d/n' %(threadname, x, count))

print('-----/n')

time.sleep(1)

def main(num):

global count, mutex

threads = []

count = 1

# 创建一个锁

mutex = threading.Lock()

# 先创建线程对象

for x in range(0, num):

threads.append(threading.Thread(target=thread_main, args=(2,)))

# 启动所有线程

for t in threads:

t.start()

# 主线程中等待所有子线程退出

for t in threads:

t.join()

if __name__ == '__main__':

num = 4

# 创建4个线程

main(4)

运行结果:

>>>

threadname: Thread-1,threadnum:0,threadcount:2

threadname: Thread-3,threadnum:0,threadcount:4

threadname: Thread-2,threadnum:0,threadcount:3

threadname: Thread-4,threadnum:0,threadcount:5

-----

-----

-----

-----

threadname: Thread-1,threadnum:1,threadcount:6

threadname: Thread-3,threadnum:1,threadcount:7

threadname: Thread-2,threadnum:1,threadcount:8

threadname: Thread-4,threadnum:1,threadcount:9

-----

-----

-----

-----

>>>

3.2 Python threading实现多线程

#-*- encoding: gb2312 -*-

import threading

import time

class Test(threading.Thread):

def __init__(self, num):

threading.Thread.__init__(self)

self._run_num = num

def run(self):

global count, mutex

threadname = threading.currentThread().getName()

for x in range(0, int(self._run_num)):

mutex.acquire()

count = count + 1

mutex.release()

print('threadname: %s,threadnum:%d,threadcount:%d/n' %(threadname, x, count))

print('-----/n')

time.sleep(1)

if __name__ == '__main__':

global count, mutex

threads = []

num = 4

count = 1

# 创建锁

mutex = threading.Lock()

# 创建线程对象

for x in range(0, num):

threads.append(Test(2))

# 启动线程

for t in threads:

t.start()

# 等待子线程结束

for t in threads:

t.join()

结果:

>>>

threadname: Thread-1,threadnum:0,threadcount:2

threadname: Thread-3,threadnum:0,threadcount:4

threadname: Thread-2,threadnum:0,threadcount:3

threadname: Thread-4,threadnum:0,threadcount:5

-----

-----

-----

-----

threadname: Thread-1,threadnum:1,threadcount:6

threadname: Thread-3,threadnum:1,threadcount:7

-----

threadname: Thread-2,threadnum:1,threadcount:8

threadname: Thread-4,threadnum:1,threadcount:9

-----

-----

-----

>>>

. 字符串操作

4.1.连接字符串

def strcat(sStr1,sStr2):

sStr1 += sStr2

return sStr1

print(strcat('strcat','append'))

4.2.查找字符

def strchr(sStr1,sStr2):

nPos = sStr1.index(sStr2)

return nPos

print(strchr('strchr','r'))

4.3.字符串长度

>>> print(len('tianlesoftware'))

14

4.4.将字符串中的小写字符转换为大写字符

>>> sStr1='TianleSoftware'

>>> print(sStr1.upper())

TIANLESOFTWARE

>>> print(sStr1.lower())

tianlesoftware

4.5.追加指定长度的字符串

def strncat(sStr1,sStr2,n):

sStr1 += sStr2[0:n]

return sStr1

print(strncat('12345','abcdef',3))

4.6.将字符串前n个字符替换为指定的字符

def strnset(sStr1,ch,n):

sStr1 = n * ch + sStr1[3:]

return sStr1

print(strnset('12345','r',3))

4.7. 翻转字符串

>>> sStr1 = 'abcdefg'

>>> sStr1 = sStr1[::-1]

>>> print(sStr1)

gfedcba

4.8.查找字符串

>>> sStr1 = 'abcdefg'

>>> sStr2 = 'cde'

>>> print(sStr1.find(sStr2))

2

4.9. 分割字符串

>>> sStr1 = 'ab,cde,fgh,ijk'

>>> sStr2 = ','

>>> sStr1 = sStr1[sStr1.find(sStr2) + 1:]

>>> print(sStr1)

cde,fgh,ijk

. 列表(List 操作

5.1 创建列表

sample_list = ['a',1,('a','b')]

5.2 Python 列表操作

sample_list = ['a','b',0,1,3]

5.2.1 得到列表中的某一个值

value_start = sample_list[0]

end_value = sample_list[-1]

5.2.2 删除列表的第一个值

del sample_list[0]

5.2.3 在列表中插入一个值

sample_list[0:0] = ['sample value']

5.2.4 得到列表的长度

list_length = len(sample_list)

5.2.5 列表遍历

for element in sample_list:

print(element)

5.3 Python 列表高级操作/技巧

5.3.1 产生一个数值递增列表

num_inc_list = range(30)

#will return a list [0,1,2,...,29]

5.3.2 用某个固定值初始化列表

initial_value = 0

list_length = 5

sample_list = [ initial_value for i in range(10)]

sample_list = [initial_value]*list_length

# sample_list ==[0,0,0,0,0]

整理自网络

------------------------------------------------------------------------------

Blog http://blog.youkuaiyun.com/tianlesoftware

网上资源: http://tianlesoftware.download.youkuaiyun.com

相关视频:http://blog.youkuaiyun.com/tianlesoftware/archive/2009/11/27/4886500.aspx

DBA1 群:62697716(); DBA2 群:62697977()

DBA3 群:62697850 DBA 超级群:63306533;

聊天 群:40132017

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值