设为首页 收藏本站
查看: 644|回复: 0

[经验分享] Python 基础语法知识二

[复制链接]

尚未签到

发表于 2017-4-26 10:10:40 | 显示全部楼层 |阅读模式
以下语法基于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这两个模块来实现的。
python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用。
threading模块里面主要是对一些线程的操作对象化了,创建了叫Thread的class。
一般来说,使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进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.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(满); DBA2 群:62697977(满)
DBA3 群:62697850 DBA 超级群:63306533;
聊天 群:40132017
--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-369389-1-1.html 上篇帖子: python模块学习 ---- anydbm, shelve 下篇帖子: Python:缺失的访问控制?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表