资讯专栏INFORMATION COLUMN

初识python

gitmilk / 2553人阅读

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

"Life is short, you need Python"    --Bruce Eckel
人生苦短,我用python
一. 初印象:short

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

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

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

#include 
int main() {
    printf("Hello, World!");
    return 0;
}

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

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

再看看java的“小弟”javascript:



    第一个JavaScript程序




 

php:


 
  PHP 测试
 
 
 Hello World

"; ?>

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出来。代码太过简洁,有利也有弊。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43440.html

相关文章

  • Python基础系列:初识python引用计数与弱引用

    摘要:第一次初始化对象,并且用变量来引用,所以这里的引用计数就为。接下来通过创建一个弱引用,通过打印引用计数后,发现计数并没有改变。由于一次仅能有一个对象被回收,引用计数无法回收循环引用的对象。所以弱引用很适合处理这种循环引用的场景。 写在前边: 之前的socket系列就告一段落,主要是对自己所学做一个总结与记录。 接下来我打算基于libevent写一个支持并发的HTTP服务器。因为之前学习...

    robin 评论0 收藏0
  • 趣味Python入门(一):初识Python

    摘要:尽管如此,还具有高级的数据类型和灵活性。它配备了大量的标准模块,可用于程序库。一些模块提供如下功能通过这些很赞的特性,瞬时化身为面向过程的语言。开发者可以便捷地将解释器连接到一个使用编写的应用程序,并能随时用作扩展。下一部分会继续分享。 【编者按】本文作者是 Abhishek Jaiswal ,擅长 .NET、C#、Python 等多种语言的技术控。本文中,作者通过活泼有趣的口吻向大家...

    sutaking 评论0 收藏0
  • python综合学习七之TensorFlow初识

    摘要:从这一节开始,将系统的学习这个开源包。为何要使用无可厚非地能被认定为神经网络中最好用的库之一。它擅长的任务就是训练深度神经网络。 从这一节开始,将系统的学习TensorFlow这个开源包。 一、TensorFlow概念 TensorFlow是Google开发的一款神经网络的Python外部的结构包, 也是一个采用数据流图来进行数值计算的开源软件库.TensorFlow 让我们可以先绘制...

    qiangdada 评论0 收藏0
  • NeoVim初识

    摘要:检查是否已经有了支持看到这个,就是成功了添加支持首先查看本机的在哪个位置,比如。安装到目录下然后在配置文件中加入引用注意后要用单引号。重启后,在中安装应用的命令 安装 Mac上安装(无需编译直接解压运行): cd /tmp wget https://github.com/neovim/neovim/releases/download/v0.3.1/nvim-macos.tar.gz &...

    褰辩话 评论0 收藏0
  • Python--Redis实战:第一章:初识Redis:第三节:你好Redis-文章投票试炼

    摘要:为了防止用户对同一篇文章进行多次投票,网站需要为每一篇文章记录一个已投票用户名单。上一篇文章实战第一章初识第二节数据结构简介下一篇文章实战第二章使用构建应用第一节登录和缓存 上一篇文章: Python--Redis实战:第一章:初识Redis:第二节:Redis数据结构简介下一篇文章:Python--Redis实战:第二章:使用Redis构建Web应用:第一节:登录和cookie缓存 ...

    Meils 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<