这是我第一次写博客,没想到我的第一次就给了python,也是因为最近深度学习的兴起, 让python语言好好的火了一把。由于之前在学习tensorflow,特别是对于官方给出的数据处理之类的代码,比如:input_data.py 看的不是太懂,虽说是入门级的代码,但毕竟是谷歌那些有丰富经验的工程师写的,对于没有python经验的我来说,还是蛮痛苦的。 这篇笔记主要是基于udacity的《编程基础:python》这个视频,可能其中会穿插一些tensorflow里的代码,因为之前有不理解的地方,现在多多少少理解了一些。这个笔记主要是写给自己看的,为了加深印象,所以不喜勿喷 !(如果有写的不对的地方,还请各位指正)
----------------------------------------------------------------分割线---------------------------------------------------------------------
1. 安装python 2.7
这个视频是基于python 2.7来讲的,所以最好下载一个python 2.7。安装也很简单,网上资料也很多,当然你也可以按照这个链接里的步骤去安装:https://classroom.udacity.com/courses/ud036/lessons/990110642/concepts/36691786570923
2.如何使用第三方模块?
python 如此强大在于它有着丰富的模块或者说是库函数,你可以做很多你想做的事,比如web开发,数据挖掘,爬虫等
就以课程中的例子, 该例子是通过运行程序向手机发送消息:
import twilio
# from twilio.rest import Client 代表twilio文件里有一个rest文件,rest文件里有一个Client类
# from twilio import rest
# 一般插入某个模块直接import对应模块就可以了,当然也可使用关键字from,使用from后,你可以认为是插入了模块的某个特定的功能和属性,一个很明显的不同是:如果只是import twilio,要想用Client类则需要twilio.rest.Client,而采用from twilio import rest,则只要rest.Client。这是它们最明显的不同。
# Your Account SID from twilio.com/console
account_sid = "ACf7b5b692f1563b4761f0f8cccec16bee"
# Your Auth Token from twilio.com/console
auth_token = "853b3149ada33ca55780abecf9c9f43f"
client = twilio.rest.Client(account_sid, auth_token)
# client = rest.Client(account_sid, auth_token)
message = client.messages.create(
to="+86xxxxxxxxxx",
from_="(331)214-3327",
body="Hello from Python!")
print(message.sid)
tips(关于使用import or from...import): 在构建大项目的时候,尽量用import modual ,这样会方便程序员知道该函数引用自哪个模块。
3. 类的定义和使用
class DataSet(object):
def __init__(self, images, labels, fake_data=False, one_hot=False,
dtype=tf.float32):
"""Construct a DataSet."""
self._images = images
self._labels = labels
self._epochs_completed = 0
self._index_in_epoch = 0
以上是tensorflow数据处理里的一段代码,最需注意的是 __init__(self, ...),对于def __init__(self, ...) 里的第一个参数永远都是self ,指代创建的实例本身。 有了该初始化操作,创建实例时必须传入参数。一旦创建实例,该初始化函数就会被调用,之前看见def 还以为是需要自己调用的函数。
补充:
在一般的python文件中语句 if _name_== '_main_' 的作用:
参考例子里的代码:
代码1:
# one.py
def func():
print("func() in one.py")
print("top-level in one.py")
if __name__ == "__main__": # 对于_name_和_main_这两个特殊变量,它们是内置的,当所执行的程序并不是从外部import的情况下,name变量的值被置成_main_, 也就触发了恒等这个条件
print("one.py is being run directly")
else:
print("one.py is being imported into another module")
command line:
python one.py
输出是:
top-level in one.py
one.py is being run directly
代码2:
# two.py
import one # 与上面代码不同的是这里将one.py这个文件插入到当前文件中,你可以想像该句的作用是将one文件里的 函数定义和类定义复制过来,只不过是隐藏了而已。所以先执行的是one.py文件里的语句。并且此时由于one文件是被imported的, 所以if条件是不满足的,执行else语句。
print("top-level in two.py")
one.func()
if __name__ == "__main__":
print("two.py is being run directly")
else:
print("two.py is being imported into another module")
command line:
python two.py
输出是:
top-level in one.py
one.py is being imported into another module
top-level in two.py
func() in one.py
two.py is being run directly
作用的话:我们经常在写代码时除了调动第三方模块,还需要import其他的文件,可能我们只是要调用其中的函数或者说代码重用,但又不想执行该文件。这个功能就达到了这个目的。
tensorflow的文件中的有用到以下代码:
if __name__=='__main__':tf.app.run()
其他和上面都是一样的, 主要是tf.app.run()语句,看其源码的话,就会知道它的作用,这里先占个坑,到时候需要了解再去看。
tips:这门课程主要侧重在类的一些基本概念的介绍,而且通过几个好玩的小项目来加深这种概念的理解,所以感觉这门课程更适合完全没有编程基础的童鞋儿,有基础的直接可以看看[2]或者是learning the python in hard way(虽然我并没有看过)。
reference:
[1] : https://cn.udacity.com/course/programming-foundations-with-python--ud036
[2] : 廖雪峰python教程