python基础学习_打卡14天

记录参与python基础知识14天(08/28-09/10)打卡学习活动,每天更新

python 第一天(08/28)

1 python 的历史

1.1 python的历史(2.7/3.5)

1.2 python的安装(64位安装包)

jupyter 记事本软件

1.3 python的基础语法

注释(#)、数字(浮点数 整数区分)、字符串(单引号 双引号 三引号 成对)
布尔值(True False 大小写敏感)、空值(None 大小写敏感)、
字符串转义(\)
Raw String (开始加r,字符串不发生转义)
Unicode 字符串 (字符串前加u,每一个位表示一个“字”)(中文的全面支持)

python 第二天(08/29)

变量/算法和表达式

2.1 变量

一个名字,首字母为字母或着下划线,可以使用字母、下划线、数字(浮点数
大小写敏感,
不要使用大小写的方式区分不同的变量

2.2 变量类型

变量指向一个值,值拥有一个类型。
变量无类型,变量指向的值有类型,
运行前,不能知道变量对应的类型

动态类型语言

2.3 算符和表达式

2.3.1 算符

是连接一个或多个元素的符合,用来表达计算

常用算符:
+ - * ** / // %  <<  >>  & | ^  ~  <> <=  >= ==  !=  not and or

python2 与 python3 中,要注意/ 运算的小数处理

2.3.2 算符优先级

尽可能使用()来表明优先级,易于阅读为优。

2.3.3 表达式

一串由算符连接的元素

2.3.4格式化字符串

用于输出格式化的数据内容 format %

print("hello {0}, 今天 {1}".format("wly","星期四"))
print("hello  %s ,今天 %s" % ("wly","星期四"))

python 第三天

3 执行流控制

控制流的先后执行顺序。

3.1 逻辑行和物理行

  • 逻辑行:一个业务逻辑,可以多行
  • 物理行:一行
一个逻辑行可以分成多个物理行。
一行内容限制在80个字符以内

格式的缩进是很重要的部分,会对流程及业务代码产生影响

  • 单行写法:
    检测一个条件,不满足就结束
    一行保持在80个字符以内,超出后会自动换行,不太友好。

3.2 if

if (条件):
    代码块
else:
    代码块
 
 #多条件判断
 if 条件1:
     print("条件1")
 elif 条件2:
     print("条件2")
 else:
     print("3")

获得输入的内容:input是python3写法 raw_input 是python2写法

3.3 while

条件初始值(真值)
while 执行循环的条件:
    代码块
else:
    代码块(执行while外的处理)
   设置条件为假值

3.4 for

用户枚举对象

for i in range(1,5):   #range()前包后不含
    print(i)
else:
    print("over")

3.5 break 退出当前循环,中断

一般用于循环处理中,判断当满足某一条件时,进行中断流程退出操作。
注:break 是退出最近的一个循环流程。了解与return的区分(return 用于一个函数中的结束)

3.6 continue

跳出本次循环,进行下一次循环。

while true:
    s= input("enter something:")
    if(条件1):
        break
    if(条件2):
        print("2")
        continue
print("end")

3.7 练习题

结果:5,6,7,8,9

python 第四天

4 函数/局部变量/作用域

4.1 函数

可以无参,可以多个参数

def hello():
    print("hello")
hello()
def hello_name(name):
    print("hello {0}".format(name))
hello_name("wly")

4.2 局部变量 /全局变量

函数体内定义的变量为局部变量
在模块内定义的变量为全局变量

局部变量:生命周期随函数的创建而开始,结束而终结
局部变量与全局变量的区别之处就是变量的作用域不同

函数内可以使用全局变量和自身定义的局部变量,不能调用其他函数的局部变量

函数内使用global 定义一个全局变量

4.3 作用域

变量可见的范围是变量的作用域
原则:内层作用域可以访问外层作用域的变量,反之不行。
内外作用域存在同名称变量,内层的被使用
建议内外作用域中的变量名称保持不一致,否则容易引发 unbound 异常

4.4 参数默认值

函数定义时提供给参数的值,
不要使用可变对象作为参数默认值,可以使用None作为默认值来规避,在函数内部进行None判断
提供默认值的参数必须在无默认参数的右侧

python 第五天

5 返回值/lambda表达式

5.1 返回值

  • 函数内数据传递到外部,return
    doc String 为每个函数增加一个文档字符串,可以被代码访问。
    在函数的第一个逻辑行定义一个字符串
    访问方式是function.doc

      def fun():
          ''' 函数说明 \n abcdefg'''
          print("fun")
      fun.__doc__
    

5.2 lambda 表达式

快速定义简单函数的方法

def inc = lambda n:(n+1)
print(inc(10))

def fib(n):
    if n<=1 :return 1
    return fib(n-1) + fib(n-2)
fib(10)

5.3 模块 module

预先写好的代码快,供其他代码使用。
一个module是一个独立文件
每个module拥有自己的全局变量空间。
数据定义,函数,均定义在其中

writefile testmod.py
a=1
b = 2
def add(a,b):
    return a+b
if __name__ == "__main__":
    print(" test") 

import testmod
testmod.a

5.4 from import 语句

引入模块中的某个(或全部)变量
form testmod import a 直接使用a
注:只引用模块,不推荐引用变量

**dir ** 列出某个模块所有变量

python 第六天

6 模块预编译/Mian文件模式写法

6.1 模块预编译

当import 时,python会编译出pyc文件。
先把字符串编译为中间代码,和Java C 类似。
好处:加速处理。坏处:时间紊乱会导致异常。
python3 3.2以后,会在当前目录下生成pycache目录,缓存pyc文件,避免解释器无法载入对应的pyc文件。

name 属性

当 模块的属性name 为”main"时,说明当前模块被作为脚本运行(此时不会生成pyc文件)。
当作为import模块时,name为模块名称

if __name__ == "__main__":
    print("script")

6.2 Mian 文件模式写法

#!/usr/bin/python   # 脚本说明
# _*_ coding: utf-8 _*_    #编码格式
```
@date: 2019-09-02     #文件说明
@author: wly
@copyright: 2019. wly
@license: testdemo
```

6.3 package

package 是比modules 更大一级的结构(目录)
一个package 可以包含多个modules 和packages 。
一般一个package是一个独立的目录,包含init.py文件,该文件说明了如何加载整个package

python 第七天

7 内置数据结构

7.1 list

具有顺序、可以随意访问其中位置、可以添加删除、其中的元素不需要是同类型

shoplist = ["dfasd","dddd","eeee","dasdf"]
shoplist2 = list()
shoplist2.append("dddd")
len(shoplist)  #获取list长度
shoplist.sort()   #排序

7.2 tuple

具有顺序、随意访问任意位置、不可以添加删除、其中的元素不需要是同类型

zoo = ("python", "ddddd","java", "camel")
new_zoo = "monkey", "dddddfas", zoo

7.3 操作序列对象

通过[]访问、通过[]设定、通过for枚举、通过[:]设定、通过[:]访问、通过[::]步进

shoplist = ["apple", "mango", "carrot", "banana"]
shoplist[0]  # 第一个
shoplist[-1] # 倒数第一个
shoplist[1:3] #前闭后开  取1,2,位的数据,不包含第3位
shoplist[2:] # 从2到尾,不含尾
shoplist[::-1] # 步进,-1表示取一位向前一步,1表示取一位向后一步

python 第八天

8 练习和列表推导式

8.1 练习

  • 1.一个list ,内容为10以内所有质数
 prime = [2,3,5,7]
    1. 计算100内所有质数的列表
      试商法
primes = [2,3,5,7]
for i in range(10,100):
    prime = True
    for j in primes[:5]:
        if  i % j ==0:
            prime = False
            break
    if prime:
        primes.append(i)
print(primes)
#  ------
primes =[]
l = list(range(2,100))
while l:
    j = l.pop(0)
    primes.append(j)
    i = 2
    while j*i <=100:
        if j * i in l:
            l.remove(j*i)
        j +=1
print(primes)
    1. 将这个列表转为tuple
  tuple(primes)
    1. 反转tuple
 tuple(primes)[::-1]
    1. list操作:第一个list拥有原list前一半的反向,第二个list拥有原list后一半的反向
primes[:len(primes)//2:-1], primes[len(primes)//2::-1]

8.2 列表推导式

有一个列表,借助这个列表生成另一个列表

l = range(12)
t = [i * i for i in l]
print(t)

primes = [2,3,5,7]
for i in range(10,100):
    prime = True
    for j in primes:
        if  i % j ==0:
            prime = False
            break
    if prime:
        primes.append(i)
print(primes)

python 第9天

9 dict字典/string

9.1 dict 字典

具有一系列成对对象,一个叫做key,一个叫做value
无顺序,key不能重复。
通过key可以确定唯一一个value
可以添加和删除
key和value 不需要是同类型
key必须不可变

9.2 set

具有一组对象。无顺序,不可重复
可以添加删除
其中元素不需要是同类型,必须是不可变对象

bri = set(['aaa','bbb','ccc'])
bri = {'aaa','ccc','bbb','ddd'}  #2.7以后版本
bric = bri.copy()
bric.add('eee')
bric & bri

9.3 string的一些其他方法

  • startswith(str) #以str 开头
  • endswith(str) # 以str 结尾
  • in # 判断是否存在
  • find #查找位置
  • replace #替换
  • upper #大写
  • lower #小写
  • join #list转string,以规定的符号分割
  • split #string转list
delimiter= '_*_'
mylist = ['aaa','bbb','ccc','eee','ddd']
print(delimiter.join(mylist))
print(delimiter.join(mylist).split('_*'))

9.4 练习

使用代码求一下电话号码里面有几个国家:
+86 123241+65 23423+51 23423+30 23423+65 23423+30 23423+86234123

str = '+86 123241+65 23423+51 23423+30 23423+65 23423+30 23423+86 234123'
print(str.split(

python第十天

10 面向对象编程/类成员和对象成员

10.1 面向对象编程

万物皆对象

10.1.1 class

class Person:
    pass
p = Person()

10.1.2 方法

class Person:
    def say_hi(self):
    print("hello, how are you")
p= Person()
p.say_hi()

10.1.3 数据

对象包含的数据,可以用 . 访问。

class Person:
    def set_name(self, name):
        self.name = name
    def say_hi(self):
        print("hello, {} ,how are you".format(self.name))
p=Persion()
p.set_name(”shell")
print(p.name)
p.say_hi()

10.1.4 self

python self 代指本身,类似C# 中 this
调用时可以不传递,使用时,需要将self 定义为第一个参数
在函数内使用时,对象的成员使用self.xx的方式

10.1.5 init方法

是对象的第一个方法,用于初始化对象数据
init函数是初始化方法,非构造方法
self对象在init函数被调用之前创建
python中,对象的属性可以自由添加删除,不需要在类里面声明
一般而言,对象里的所有数据都会在init方法中赋值,后面可以变更

10.2 类成员和对象成员

类和对象分别拥有成员,例如数据和方法
对象可以引用类成员(self.say_hi()),也可以引用对象成员(self.name)
当有重名时,有限引用对象成员
类成员在所有对象间共享,而对象成员只是它自己的。

python 第十一天

11 继承/输入输出

11.1 继承

基类、继承类(子类、父类)
子类可以继承父类的成员,当子类和父类定义同名成员时,有限引用子类的
子类拥有父类的所有成员

11.2 输入输出

11.2.1 从命令行输入

input(python3) raw_input(python2)

try:
    input= raw_input
except NameError:
    pass

11.2.2 从文件中输入输出

使用open打开文件进行读写。 调用方法和c的fopen类似

import sys
poem = '''\
Programming is fun 
When the work is done if you wanna make your work also fun:
    use Python
'''
f= open('poem.txt','w')
f.write(poem)
f.close()

f = open('poem.txt')
while True:
    line = f.readline()
    if len(line) ==0:
        break
    sys.stdout.write(line)
f.close()

以上都是linex命令,因此不能在windows执行

** windows 中对应行为的命令为 dir\ type\ del **

python 第十二天

12 异常、异常处理、常见异常

12.1 异常

python 允许在出现错误的时候,抛出这个错误
错误按顺序一次向上查找,知道第一个合适的处理方法对错误进行处理。
如果无人处理,则会程序崩溃

  • 异常输出阅读
    异常输出通常和函数的调用顺序相同,和栈的顺序相反。
    最上层的调用在最上面,最后执行到的地方在最下面。
    最后一行是异常的名字和参数

12.2 异常处理

包含三部分

  • 被监管代码体:当其中发生异常时,异常被向上抛出
  • 错误类型:当遗产属于定义的这个错误类的子类时,异常处理代码体被调用
  • 异常处理代码体:除非明确知道要捕获所有异常,否则演技你使用捕获所有异常来处理某种特定问题
try :
    input = raw_input
except NameError:
    pass

try:
    number = int(input('enter something-->'))
except ValueError:
   print("Illegal number")
else:
    print(number)

12.4 常见异常

  • AttributeError 当出发某个实例时找不到对应的属性方法,
  • ImportError 导入的文件找不到
  • IndexError 下标超限
  • KeyError
  • NameError 对象找不到
  • SyntaxError
  • IndentationError 排版错误,缩进异常, tab 和空格被混用
  • TypeError
  • ValueError

12.5 抛出异常

def f():
    print("i`m ok")
    raise exception('actually not')

try:
    f()
except Exception as err:
    print(err)

12.6 自定义异常

#必须自Exception中继承
class ShortInputException(Exception):
    '''A user_defined exception class.'''
    def __init__(self,length,atleast):
        Exception.__init__(self)
        self.length=length
        self.atleast = atleast

try:
    input = raw_input
except NameError:
    pass 

12.7 finally

用户无论是否异常,它下面的内容更必然会被执行
多用于清理。(文件的关闭,缓存的清理等)

try:
    number = int(input('enter something-->'))
except ValueError:
   print("Illegal number")
else:
    print(number+1)
finally:
    print('(clean up here)')

12.8 with

with 可以在退出区块时自动关闭文件,而且对异常安全。
with不仅可以用于文件,而且可以用于很多需要在离开时自动关闭的对象,如锁

with open("pome.txt") as f:
    ......

12.9 assert

断言某个事情为真,如果不为真,则抛出异常

assert 1== 0, Exception(' of course')

python 第十三天

13 文档/python2/3的差异

13.1 文档

在线文档
https://docs.python.prg/2/
https://docs.python.org/3/
Library Reference

建议安装时安装本地文档,与安装的版本保持一致,方便查阅。
第三方文档查询 (pypi )

13.2 python2/3 的差异

python2 中的固有的设计问题

  • print内置关键词
  • 混同了bytes 和 unicode
  • / 是整数除法

python3中

  • print由关键字改为函数
  • 所有字符串默认Unicode
  • / 不是整数除法

更多细节差异:https://wiki.python.org/moin/python2orpython3

13.3 python2到3 的迁移

python3 带有2to3脚本。可以完成大部分,但不是全部,需要注意。

python 第十四天

14 第三方软件安装

14.1 setuptools

必须管理员安装
linux :wget https://bootstrap.pypa.io/ez_setup.py -0 - | sudo python

mac :curl https:??bootstrap.pypa.io/ez_setup.py -0 - | python

setuptools 的使用

easy_install 包名
easy_install 安装包路径

在软件的分法宝中找到setup.py 运行 python setup.py install

14.2 pip

pip install 包名
pip install -r requirements.txt 

14.3 virtualenv

功能:用于隔离出一套独立的环境,可以在里面安装各种包,而不对系统造成影响
使用场景:可以在用户目录中安装包,无需系统权限。
也可以隔离多个环境,安装不同版本的不同程序
限制:virtualenv本身,一起依赖的python是无法隔离的

14.4 virtualnv的使用

建立环境:virtualenv目录
激活环境:进入目录后执行source bin/activate
退出激活环境:deactivate
隔离环境内的安装:pip或者setup.py 均可
注意:安装时需要编译的,系统中必须由编译工具链

14.5 访问系统库

在使用virtualenv的同时需要使用系统中安装的库,需要在创建环境时用 --system-site-packages 参数
建议:在虚拟环境中在安装一次所有的库

14.6 虚拟环境的发布

使用virtualenv生成的虚拟环境可以迁移到其他机器,
需要注意:

  • virtualenv 依赖于目录工作,所以所有机器上virtualenv必须处于同一路径下
  • 不能隔离系统/Python基础环境
  • 里面所安装的库所依赖的其他系统文件,如果不在virtualenv里面安装,则每个系统上均需要自行安装

14.7 软件包安装和管理建议

python默认情况下会试图将软件安装到系统。
如果不是管理员权限,需要使用virtualenv来安装软件包
Debian/Ubuntu:安装软件第一选择apt系统
RHEL/CentOS:第一训责yum系统。
Windows/MacOS :virtualenv + pip 方式

** virtualenv + pip  均支持以上三种环境的安装 **

python打卡训练营总结

个人背景

  • 工作多年的C#程序员
  • 曾经0基础写过半年python脚本
  • 工作生活中接触过相关大数据及AI智能行业的行情

行业现状

  • C# 行情趋于下降,需求量降低,入门门槛较低,竞争大
  • python 语言有发展历史,目前是上升阶段
  • python 上手容易,精通较难
  • 该语言人员较少,从业需求量比较大

学习过程

本次学习时间上刚好处于工作的空闲时间,新旧项目过度时间,使得每天都能有时间跟随视频来学习。每天抽出1小时左右的时间来观看视频,使用markdown编辑器来记录视频知识点,相关脚本代码,也基本都会在python IDLE 中手敲执行,以及使用Jupyter查看动态执行过程中数据的变化,这个工具对深入了解python有很大的帮助。
整个学习过程中,训练营老师的每一次打卡加精,也是我坚持每天记笔记,一直写下来的动力。这也是选择参加训练营一起学习的原因。

收获

这一次的训练营活动,系统的入门并了解python语言基础,了解发展史及对应环境的安装配置,学习了较为基础的相关知识、脚本异常的处理、常用工具的使用。
这些内容,补充了我对于python语言的了解,虽然都是一些基础性知识,比较浅显易懂,但这些都是学习python语言的基石,由浅入深,这之后在接触python 相关的框架项目,就可以快速上手。
python只是一门语言,想要能够解决一些实际问题,还是需要借助其他知识的,比如说数学、线性代数、算法等。

目标

还会继续深入学习python语言,目前考虑是会从着手写一些小工具项目,以实现一些简单业务需求场景为目标,逐步过渡到参与python项目开发。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,734评论 0 10
  • 一、PyCharm的基本使用1.1、注释:为了方便自己或者其他人查看单行注释:用 # 号单行注释多行注释: 用 ...
    IIronMan阅读 8,850评论 3 18
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,378评论 0 5
  • 01 最近几天一直在自我谴责中,好几天没有写文章了。原因有很多 不知道写什么好。和大多数人一样,每天过着重复昨天的...
    拉小登阅读 186评论 0 0
  • 前天云儿说 明天你还会在 直到昨天看见你依旧没有远走 今天云儿对我说你要远走 听说只有彩虹和晚霞送了你 他们说你的...
    窮奇阅读 229评论 0 2