Python
人生苦短,我用Python。

Python 开发之旅 (7)指点迷津 之 注释

前面写的代码只有几行。阅读起来比较简单。随着知识的积累,自己写的代码也会越来越多,会出现一个不可避免的问题:时间久了不知道写的是什么

例如


hight.png


看着满屏的代码阅读起来也是比较困难的,这时候就需要一些注释,来标注我们代码的意思。这样下次引用可以很直接的进行使用。

在Python有三种注释形式:单行注释多行注释文档注释


单行注释



def add(a,b): #相加函数
    return a+b
print("%d"%(add(3,2)))


单行注释(#):在行代码的位置加入##号后面的所有语句都会被解释器理解为注释,从而不执行。


多行注释


def add(a,b):
    '''
        a:相加数
        b:相加数
    '''
    return a+b
print("%d"%(add(3,2)))


多行注释('''xxx'''):3个单引号开始,3个单引号结束 或者 3个双引号开始,3个双引号结束。


文档注释


#coding=gbk
def add(a,b):
    '''
        a:相加数
        b:相加数
    '''
    return a+b
print("%d"%(add(3,2)))


文档注释(#coding=编码格式):注意文档注释要写在文档的开头。生成什么编码格式最后存储的时候也会变成相对应的编码形式。


Python 开发之旅 (6)urllib 之 网络请求

上一节我们知道了如何去引用python自带的库:from ctypes import *  


通过上述代码我们可以在自身的py代码里引用ctypes的导出函数,这一节我们换一个自带的库:urllib.request


看名知意,大致可以了解到这是一个URL的请求库。可以实现一些网络请求。例如:获取网页的源码。


大致说一些网络请求:用户 -> 协议 -> 服务器服务器 -> 找内容 -> 用户


    用户通过相关协议去通知服务器,让服务器返回相关内容给用户。用户在加以显示。如果是通过浏览器进行网络访问。那么这个访问的方式就是协议。这个协议就是http get协议。然后服务器通过协议里面包含的内容,去找对应存储在服务器上的内容返回给浏览器。浏览器接收到内容进行解析。这样就形成了一个网页的显示过程。所以有的时候我们获取的源码是一些字符串,那是因为我们没有进行相关的界面解析绘制。


在python里获取网页源码用如下代码


from urllib.request import *  
f = urlopen('http://www.iwonmo.com')
print(f.read().decode('utf-8'))


url.png


第一行:加载库文件。

第二行:调用urlopen方法

第三行:通过f对象,调用里面的read方法然后进行utf-8转码


f:无类型变量,具体的类型看返回的值。


实际效果:


read.png

Python 开发之旅 (5)取长补短 之 库

不论我们承不承认,我们不是万能的。


Ctypes 是Python的一个外部库,通过使用这个外部库,我们可以进行一些其它的操作例如:调用其它库。


如何正确的理解库:

库是一系列代码的集合,它导出了一些公共的函数。



还记得Print?它是一个格式化输出函数。但是它只能在IDLE里面进行输出。并不能在标准的输入输出环境下进行输出。于是我们只能去调用Printf这个函数进行输出操作。但是Printf又是封装在msvcrt.dll动态链接库里的。所以我们首先要引用这个库,然后才能去调用里面的导出函数。


代码如下:

from ctypes import *   
h=CDLL("msvcrt.dll")
h.printf(b"Link:http://www.iwonmo.com")


py.png



F5运行会发现IDLE里面什么都没有输出。这就是因为printf只能在标准的输入输出环境下进行显示。可以直接用cmd进行操作。


进入Python的安装目录输入:python xxx.py 就可以显示了


cmd.png



引用第三方库

from ctypes import *
func=cdll.LoadLibrary("mac.dll")
ret=func.getNumber()
ret = string_at(ret, -1)
print(ret.decode('utf-8'))

 

Python 开发之旅 (4)特立独行 之 缩进

check.png


上图是C语言Python语言实现相同功能的对比。在C语言中每个花括号里的函数都进行了TAB缩进。而在Python里面只有return a+b进行了缩进。撇开语法不谈,只说说缩进。实际在C语言中缩不缩进区别不是很大,而在Python语言里如果不进行缩进那将是一个灾难性的事件,同级的缩进会被认为在同一块内。我认为这个块是同一级别指令。



Python解释器进行解释的时候应该是从上到下逐条解释。遇到def的时候知道这是一个函数,所以不做执行,等待调用。而遇到TAB缩进时,又发现与上一指令不在同一级别或者说块内,所以也会不执行。直到与Python相遇。


那么如果不缩进的话在return处会触发“expected an indented block”提示,告诉你此处需要缩进。那么你只需要一个TAB就可以解决。


如果你一开始就有一个很好的代码书写习惯,实际这些问题你遇到的几率很小,或者说微乎其微。

Python 开发之旅 (3)如法炮制之 My Function

上一节说过:在我们接触数学的时候是不是第一步都是学习加减乘除?通过加减乘除可以实现两个数以上的计算结果。这个加减乘除就是一个内置函数。


那么现在就是将加减乘除变为函数的时候,注意这个函数不再是内置函数而是用户自定义函数


打开IDLE这里先不要输入任何代码,继续选择菜单栏的 File- New File。会弹出一个未命名的编辑窗口,在这里及使输入回车也不会运行代码。


现在开始输入代码:


def add(a,b):
    return a+b
print(add(3,2))


在新弹出的窗口选择 File- Save。选择一个路径,输入一个文件名。继续选择 Run - Run Module。或者直接F5快捷键。


def.png



return.png


这里是不是得到了一个结果是5的 shell 界面。


还是回归到源码


def add(a,b):
    return a+b
print(add(3,2))


def 在python里面是定义一个函数的开端。add是函数的名字 a,b是函数的参数。return 是返回的意思。返回的是a与b相加的值。


print是格式化打印。由于add函数是具有返回值的,所以打印的时候就是打印的3+2的值。


mind.png