初识python

发布时间:2019-06-10 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了初识python脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

很早就听说python的赫赫大名了,这学期学校也开了这门课,正好可以感受一下这门语言的魅力,对比C/C++/JAVA,它到底有什么独特的地方呢?

"Life is short, you need Python" --bruce Eckel
人生苦短,我用python

一. 初印象:short

曾经有这样一个段子,说联合国同样一份档案,用五大官方语言写的不同版本中,最薄的那份一定是汉语的。

这个段子放在Python身上同样也成立,几大主流语言写同样一个功能,python的代码量一定是最短的那个。

比如同样是hello world
C/C++需要五行:

#include <stdio.h>
int main() {
    printf("Hello, World!");
    return 0;
}

java也需要五行,但代码量明显比上面的要多:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

再看看java的“小弟”javascript:

<htML>
<head>
    <title>第一个JavaScript程序</title>
</head>
<bdoy>
<script type="text/javascript">
    document.write("Hello World!");  // 输出语句
</script>
</body>
</html> 

php:

<html>
 <head>
  <title>PHP 测试</title>
 </head>
 <body>
 <?php 
 echo '<p>Hello World</p>'; ?>
 </body>
</html>

js和php排除必要的html标签,也需要一两行,再看看python:

print("Hello World")

只需要一行,简单到没朋友,难怪连小学生都可以轻易上手

这只是python代码简短的冰山一角,它几乎每一部分都是围绕"short"来设计的

二、灵活

即使只看列表这一节,也能感受到python的语法是相当灵活的

1. 使用列表推导式生成列表

#生成含0到9的列表
list = [ x for x in range(10)]
#[0,1,2,3,4,5,6,7,8,9]
#生成指定列表中平方大于200的数的列表
list = [10, 20, 30, 40, 50, 60]
result = [x for x in list if x * x > 200]
#[20, 30, 40, 50, 60]

列表推导式可以看成是for循环的一种简写,使得生成列表的过程变得十分简单。

2. 使用切片操作列表

举个简单的例子:

list = [x for x in range(10)]
#list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#从list中下标0开始,到下标8结束,间隔为2取列表中的元素
result = list[0:8:2]
#result = [0, 2, 4, 6]

事实上,切片的功能远非如此,列表的增删改查都可以通过切片实现

#逆置
result = list[::-1]
#删除列表下标为0,1,2的元素
list[:3] = []
#将列表偶数位赋值为0
list[::2] = [0] * (len(list)//2)

切片更多的操作这里就不再赘述,总之这个操作十分灵活,但有时却不能一眼看出操作实际目的,可读性

4. 解包压包,让代码效率如此之高

序列解包,最简单的理解就是将列表,集合等序列里的元素剥离出来,而压包则是相反的过程
最简单的解包:

x, y, z = [1, 2, 3]
#x = 1, y = 2, z = 3

利用这个功能就可以非常简便地实现交换

x, y, z = z, x, y
# x = 3, y = 1, z = 2

也可以替代切片操作(表示多个元素,_表示忽略元素,_表示忽略多个元素)

x, *y, z = [1, 2, 3, 4, 5]
# x = 1
# y = [2, 3, 4]
# z = 5

x, *_, z = [1, 2, 3, 4, 5]
# x = 1
# z = 5

还可以让函数返回多个值:

def testFun(name, number):
    return 'name:' + name, 'age:' + number
    
name, number = testFun('zhangsan', '24')
print(name, number)
# name:zhangsan age:24

最简单的压包:

key = ['name', 'age', 'number']
value = ['zhangsan', 12, 1000]
person = dict(zip(key, value))
#person = {'name': 'zhangsan', 'age': 12, 'number': 1000}

解包与压包混用:

data = [
    ('Bob', '1990-1-1', 60),
    ('Mary', '1996-1-4', 50),
    ('Nancy', '1993-3-1', 55)
]
for name, *args in data:
    print(name, args)
    
# Bob ['1990-1-1', 60]
# Mary ['1996-1-4', 50]
# Nancy ['1993-3-1', 55]

在函数当中使用(可变参数)与*(关键字参数,将实参解释为键值对):

def myfun(First, *middle, last, ** keyAndValue):
        print('first = ', first)
        print('middle = ', middle)
        print('last = ', last)
        print('keyAndValue = ', keyAndValue)
        
myfun(1,2,3, last = 4, name = 'zhangsan', age = 1)

# first =  1
# middle =  (2, 3)
# last =  4
# keyAndValue =  {'name': 'zhangsan', 'age': 1}     

利用***混用表示任意参数,例如在装饰器模式中:

def mydecorator(func):
     def wrapper(*args, **kw):
         print('一个装饰器')
         return func(*args, **kw)
     return wrapper

@mydecorator
def myfun(name, age, number):
    print(name, age, number)
    
myfun('zhangsan', 24, 1000)

wrapper函数使用*args, **kw作为参数,则被修饰的myfun函数需要的参数无论是什么样的,传入wrapper都不会报错,这保证了装饰器可以修饰各种各样函数的灵活性。

总结

python刚入门,确实被它简洁的语法给深深吸引了,甚至一度怀疑自己是在敲指令,而非写代码,但它的灵活多变的特性也使得程序在我写完没过几天,就完全看不懂了,即使是一个逗号,冒号也会隐藏大量细节,而这样的细节通常很难debug出来。代码太过简洁,有利也有弊。

脚本宝典总结

以上是脚本宝典为你收集整理的初识python全部内容,希望文章能够帮你解决初识python所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。