Python进阶内容

本文主要探讨Python3的进阶内容,包括字符串操作、循环结构、字典使用、类型转换和执行系统命令等。深入讲解了推导式,如列表、字典和集合推导,并介绍了lambda表达式和一行式的应用。同时,提到了如何进行脚本性能分析和文件传输,特别是利用Python的第三方包进行文件传输。
摘要由CSDN通过智能技术生成

Python版本为Python3

字符串

# 去除空格
>>>"   xyz   ".strip()            # returns "xyz"  
>>>"   xyz   ".lstrip()           # returns "xyz   "  
>>>"   xyz   ".rstrip()           # returns "   xyz"  
>>>"  x y z  ".replace(' ', '')   # returns "xyz" 

# 修改字符串
>>>str = "hello world"
>>>str = str[:5] + "," + str[6:]
>>>str                            # return "hello,world"

循环

# 如果只是单纯的想循环次数而不是遍历列表等,建议采取下面这种方法
>>>for _ in range(10):
...    print(x)         # 连续输出10个x
...

# 列表的另一种循环
>>>list1 = [(1, 2), (3, 4), (5, 6)]
>>>for i, j in list1:   # 可放入两个参数
...    print(i, j)      # 分别输出两个值,分三次输出
...

# zip在循环中的用途
>>>list1 = [1, 2, 3]
>>>list2 = [4, 5, 6]
>>>for i, j in zip(list1, list2):
...    print(i, j)      # 按顺序输出两个值,分三次输出,第一行为1,4

字典

>>>dict = {"a": 1, "b": 2, "c": 3}

# 所有的key
>>>dict.keys()    # dict_keys(['a', 'b', 'c'])

# 所有的value
>>>dict.values()  # dict_keys([1, 2, 3])

# 所有的值
>>>dict.items()   # dict_items([("a": 1), ("b": 2), ("c": 3)])

类型转换

# 像一般的强制转换,如int、str我就不举例了
# eval可以智能识别字符串需要转换的对象,如果有转换不了的,就会报错
>>>s = "123"
>>>type(s)              # return <class 'str'>
>>>s = eval(s)
>>>type(s)              # return <class 'int'>

>>>dict = '{"a": 1, "b": 2, "c": 3}'
>>>type(dict)           # return <class 'str'>
>>>dict = eval(dict)    
>>>type(dict)           # return <class 'dict'>

# 还有列表、元组等类型也可以使用此方法,在此就不一一举例了

执行系统命令

有时候我们为了方便需要在Python中执行系统命令

# 导入系统管理模块
>>>import os
# 将结果保存在str中,command为需要执行的命令,command为字符串
>>>str = os.popen(command).read() 
>>>type(str)            # return <class 'str'> 一般情况下需要另行处理

推导式(comprehensions)

列表推导式

variable = [out_exp for out_exp in input_list if out_exp == 2]

举个栗子

# 返回一个由0-9组成的列表
>>>list = [x for x in range(10)]

# 返回一个由0-9的二次方组成的列表
>>>list = [x**2 for x in range(10)]

字典推导式

dict = {
    key: value for key, value in other_dict.items() 
}

集合推导式

基本同列表推导式,只需将[]换成{}即可。

注:集合无重复数据,可利用其特性去重

lambda表达式

一行函数,又称匿名函数

格式:

lambda 参数:操作(参数)

几个栗子

>>>add_sum = lambda x, y: x + y
>>>print(add_sum(1, 2))
# 输出3

# 列表排序,降序且以元组内第一个数字为key
>>>list = [(1, 2), (4, 1), (9, 10), (13, -3)]
>>>list.sort(key=lambda x: x[1])

一行式

快速共享文件

使用下面的一行命令即可开启网络共享服务,共享文件为当前目录下的所有文件

# Python2
>>>python -m SimpleHTTPServer

# Python3
>>>python -m http.server

格式化输出

py文件中引入pprint模块,可以漂亮的输出字典、列表等

from pprint import pprint

pprint(dict)

终端下,可使用一行命令直接美化json文件的输出

>>>cat file.json | python -m json.tool

脚本性能分析

定位脚本性能瓶颈,这里使用cProfile,实现起来比profile更快,因为它是用C写的

>>>python -m cProfile my_script.py

csv文件转为json

如题,其实是取巧了,在终端下执行Python命令,然后不换行输入命令。

>>>python -c "import csv,json;print json.dumps(list(csv.reader(open('csv_file.csv'))))"

列表碾平

将多维列表转为一维列表

# 多维列表
>>>list_many = [[1, 2], [3, 4], [5, 6]]

>>>print(list(itertools.chain.from_iterable(list_many)))
# or
>>>print(list(itertools.chain(*list_many)))

# [1, 2, 3, 4, 5, 6],此为一维列表

For-Else

结构:

for item in container:
    if search_something(item):
        # Found it!
        process(item)
        break
else:
    # Didn't find anything..
    not_found_in_container()

官网例子,对比非for-else结构

for-else可以比普通for循环多执行一步–>找出质数

# 普通for循环
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, 'equals', x, '*', n/x)
            break

# for-else结构
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print( n, 'equals', x, '*', n/x)
            break
    else:
        # loop fell through without finding a factor
        print(n, 'is a prime number')

参考内容

传输文件

这个功能简直了,其实也不能称作为技巧,是Python的第三方包。具体操作可参见我的另一篇博客。

Python-Magic Wormhole

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值