我爱编程

python基础-01

2018-04-09  本文已影响0人  张老三168

学习python一年多,之前在cnblog上写博客,偶然的机会看到一个简书上的一篇文章,作者学习能力和笔记方面做的非常好,一来想学习学习,二来可以接触下简书的博客系统,同时希望可以认识更多更加优秀有趣的朋友!

python编码

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

print('python编码')

Python 变量类型

Python有五个标准的数据类型:Numbers(数字)String(字符串)List(列表)Tuple(元组)Dictionary(字典)

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

num = 10  #数值型
str = 'hello world' #字符串型
list = ['a','b','c',1,2,3]  #列表 可以通过下表(偏移)指定输出列表中的指定元素 从左到右0开始,从右左-1开始
tuple = ('a','b','c',1,2,3) #元组 可以通过下表指定输出列表中的指定元素 从左到右0开始,从右左-1开始 元素不能呗二次赋值 相当于是只读列表
dict = {'name':'mike','age':18} #字典 为无序的对象集合 通过键去访问对应的元素

print(type(num))
print(type(str))
print(type(list))
print(type(tuple))
print(type(dict))

Python数据类型转换

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

print(int(1.1)) # 转换成整型 这里要注意的是转型的字符串仅仅包含数字 要不会报错的

#c = long(b) # python3 之后没有long, 直接采用int转换成整型

print(float(10)) # 转换成浮点型

e = complex(1,2) # 创建一个复数

print(str(10)) # 转换成字符串

print(repr(10)) # 转换为表达式字符串

num1 = 10
num2 = 20
print(eval('num1 + num2'))# 将字符串str当成有效的表达式来求值并返回计算结果

s = ['a','b','c',1,2,3]
print(tuple(s)) # 将序列 i 转换为一个元组

s = ('a','b','c',1,2,3)
print(list(s)) # 将元组 s 转换为一个序列

s = {11,22,33,44}
print(set(s)) # 转换为可变集合

print(dict(one=1,two=2)) # 创建一个字典

print(frozenset(s))  # 转换为不可变集合

print(chr(48)) # chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符

# print(unichr(48))  # python3 没有用unichar函数 直接用chr替换

print(ord(u'\u2345'))  # 将一个字符转换为它的整数值

print(hex(10)) # 将一个整数转换为一个十六进制字符串

print(oct(10)) # 将一个整数转换为一个八进制字符串

Python 运算符

Python算术运算符

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

a = 2
b = 3

print(a + b) #加

print(a - b) #减

print(a * b) #乘

print(a / b) #除

print(a % b) #取模

print(a ** b) #幂 相当于是 a的b次方

print(b // a) #取整除

Python 条件语句

if 判断条件:
执行语句……
else:
执行语句……

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

salary = 20000

if(salary > 15000):
    print('勉强可以养活自己!')
else:
    print('兄弟,回家种田吧!')

python不支持switch, 如果有多种情况的判断的话,可以采用ifelseif实现
if 判断条件:
执行语句……
elif判断条件:
执行语句……

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

salary = 20000

if(salary > 50000):
    print('土豪我们做朋友吧!')
elif(salary > 30000):
    print('小资生活!')
elif(salary > 15000):
    print('勉强可以养活自己!')
else:
    print('兄弟,回家种田吧!')

Python 循环语句

Python for 循环语句

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

#################对字符串的循环读取 #####################
str = '广州';
for i in str:
    print(i)

#################对列表的循环读取 #####################
list = [10,20,30,50]
new_list = []
for i in list:
    if(i >= 19):
        # print(i)
        new_list.append(i)  #追加到新的列表
    # else:
    #     print(i)
    #     list.remove(i)         #删除列表中的元素  这里发现了个问题 如果删除后 列表的偏移量(指针)应该会重新排列,会导致 值为20的在循环中被忽略掉 最好用重新赋值到一个新的列表的形式
print(list)
print(new_list)


#################对元组的循环读取 #####################

tuple = ('a','b','c',1,2,3)
new_tuple = ()
for i in tuple:
    if(isinstance(i,int)):
        print(i)


#################对字典的循环读取 #####################

dict = {'name':'mike','age':18,'job':'engineer'}

for i in dict: #这里的i是字典的key 这里循环输出的顺序很有意思,好像按照key的第一个字母的正序输出
    # print(i)
    print(dict[i])

for key,value in dict.items(): # 对键和值都进行遍历
    print(key)
    print(value)

Python While循环语句

a = 10
b = 20

while(a < b):
    print(a)
    a = a +1

Python 循环嵌套

#!/usr/bin/python
# -*- coding: UTF-8 -*-

i = 2
while(i < 100):
   j = 2
   while(j <= (i/j)):
      if not(i%j): break
      j = j + 1
   if (j > i/j) :
       print(i, " 是素数")
   i = i + 1

print("Good bye!")

break 和 continue的区别:break是直接终止整个循环,continue是终止当前次的循环继续下一次循环

#!/usr/bin/python
# -*- coding: UTF-8 -*-

list = ['a','b',1,2,10,30,'c']
for i in list:
    if(isinstance(i,str)):
        print(i)
    else:
        # continue
        break

Python 日期和时间

Time模块

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import time # 引入time模块

print(time.time())  # 返回当前时间的时间戳(1970纪元后经过的浮点秒数)

localtime = time.localtime(time.time())
print ("本地时间为 :", localtime) # 返回当前的时间元组

localtime = time.asctime( time.localtime(time.time()) )
print("本地时间为 :", localtime) # 返回格式化的时间

print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))  # 返回自定义的格式日期

日历(Calendar)模块

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import calendar

cal = calendar.month(2016, 1)
print("以下输出2016年1月份的日历:")
print(cal)

Python 函数

函数相当于是封装好的一个代码块,可以提供应用的模块性和代码的重用性,可以分为内置函数和自定义函数
自定义函数的规则:


!/usr/bin/python
# -*- coding: UTF-8 -*-
import time

#函数的定义
def myfun():
    print('当前时间是:',time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

#函数的定义
def person(name,age): #name age为变量 可以对其进行初始
    print('名字:',name,'年龄',age)

#函数的调用
myfun()

#函数的调用
person('mike',18)

按值传递参数和按引用传递参数:
所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变

#!/usr/bin/python
# -*- coding: UTF-8 -*-

def changeParameter(data):
    data.append(123)
    print('函数内的参数:',data) #函数内的参数

data = [10,20]
changeParameter(data)

print('函数外的参数:',data)

参数
以下是调用函数时可使用的正式参数类型:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

def useParamer(name,age=18):
    print('名字:',name,'年龄:',age)

useParamer(name='mike')

def useParamer(name,age):
    print('名字:',name,'年龄:',age)

useParamer(age = '20',name='lina')


def printinfo(arg1, *vartuple):
    "打印任何传入的参数"
    print("输出: ")
    print(arg1)
    for var in vartuple:
        print(var)
    return

printinfo(10)
printinfo(70, 60, 50)

匿名函数
python 使用 lambda 来创建匿名函数:

lambda函数的语法只包含一个语句:lambda [arg1 [,arg2,.....argn]]:expression

# coding=utf-8
# !/usr/bin/python

# 定义匿名函数
sum = lambda arg1, arg2: arg1 * arg2;

# 调用sum函数
print("Value of total : ", sum(10, 20))
print("Value of total : ", sum(20, 20))

变量和局部变量:

# coding=utf-8
# !/usr/bin/python

num = 2

def myfun():
    global num # 函数内部想访问函数外的全局变量需要 加上global关键字
    num = num +1
    print(num)

myfun()

print(num)

Python 模块

简单的讲模块就是个.py后缀的文件,使用模块可以是应用的代码更加的清晰,模块中可以定义变量,函数和类,同时也可以包含可执行代码
import 语句
如果想要在一个python文件中导入另外一个python文件,那么可以采用import语句,解析器搜索路径下的模块就会将其导入,然后就可以在当前模块下直接调用导入模块的函数了
语法:

# coding=utf-8
# !/usr/bin/python

import time #导入time模块

print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))  # 调用time模块中的函数解决时间业务需求

定位模块
当import导入一个模块时,底层Python解析器对模块位置的搜索顺序是:

模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录

PYTHONPATH变量
作为环境变量,PYTHONPATH由装在一个列表里的许多目录组成。PYTHONPATH的语法和shell变量PATH的一样。

dir()函数
dir()函数一个排好序的字符串列表,内容是一个模块里定义过的名字

# coding=utf-8
# !/usr/bin/python

import time #导入time模块

print(dir())

# OUTPUT : ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'time']

在这里,特殊字符串变量name指向模块的名字,file指向该模块的导入文件名

globals()和locals()函数

# coding=utf-8
# !/usr/bin/python

num1 = 10

def myfun():
    num2 = 20
    num3 = 30
    sum = num2 + num3

    print('函数里访问的命名',locals())
    print('函数里能访问的全局名',globals())

myfun()

print('函数外调用locals',locals())
print('函数外调用globals',globals())

print(type(locals()))

#输出的是字典类型数据

reload()函数
当一个模块被引入一个执行脚本时,代码只会从上至下执行一次,如果想重新执行模块里顶层部分的代码,可以用reload()函数。该函数会重新导入之前导入过的模块
语法:reload(module_name)

Python中的包
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的Python的应用环境

例子:


image.png

demo01.py 模块

# coding=utf-8
# !/usr/bin/python

import pack

pack.ones() #调用pack包中one模块的ones方法

pack.twos() #调用pack包中two模块的twos方法

pack包下分别有:
one模块( ones()函数 )
two模块( twos()函数 )

# pack目录下创建___init__.py文件模块 使用显式的导入语句
from .one import ones
from .two import twos

这里包的引入模块原理应该是impot引入一个包的时候,会先执行init.py文件,先加载init.py文件中的引入模块,这样在当前的demo.py文件中只需引入pack包就可以直接调用包里面模块的函数

Python 文件I/O

打开和关闭文件
open()函数
open()函数打开一个文件,创建一个文件,然后就可以调用相关的辅助方法才可以调用它进行读写
语法:file object = open(file_name [, access_mode][, buffering])
参数:

模式 价格
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

file对象的属性

属性 描述
file.closed 返回true如果文件已被关闭,否则返回false。
file.mode 返回被打开文件的访问模式。
file.name 返回文件的名称。
file.softspace 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。
#!/usr/bin/python
# -*- coding: UTF-8 -*-

#打开文件
fo = open('test.txt')

print(fo.closed)  # 检测文件是否已打开
print(fo.mode)    # 返回文件的模式
print(fo.name)    # 返回文件名
# print(fo.softspace)  python3 没有该属性

file对象的方法
read()方法

#!/usr/bin/python
# -*- coding: UTF-8 -*-

#打开文件
fo = open('test.txt','r+')

print(fo.read(12))  # 读取文件

fo.close()       # 关闭文件

Write()方法

#!/usr/bin/python
# -*- coding: UTF-8 -*-

#打开文件
fo = open('test.txt','a+')

fo.write('骚年加油哦!!!\n')

fo.close()       # 关闭文件

Close()方法

remove()方法

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os

os.remove("test.txt")  # 删除文件

Python的目录操作
所有文件都包含在各个不同的目录下,不过Python也能轻松处理。os模块有许多方法能帮你创建,删除和更改目录
mkdir()方法

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os

os.mkdir('test.txt')  # 创建一个目录

chdir()方法


rmdir()方法


Python 异常处理

什么是异常:

异常处理:

try的工作原理:

当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    int('a')
except:
    print('int()方法,参数需要为数字 要不会报错')
else:
    print('OK')

try-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码

python与Java的异常处理模式相似,异常处理语句也可以嵌套
如果外层try子句中的代码引发异常,程序将直接跳转到外层try对应的except子句,而内部的try子句将不会被执行

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
     s = "hello"
     try:
          print(s[0] + s[1])
          print(s[0] - s[1])
     except TypeError:
          print("字符串不支持减法运算")
except:
     print("异常")

raise抛出异常 捕捉异常

#!/usr/bin/python
# -*- coding: UTF-8 -*-

num = 2

try:
    if(num > 1):
        raise Exception(num,'大于1')
    elif(num < 1):
        raise Exception(num,'小于1')
    else:
        raise Exception(num,'等于1')
except Exception as e:
        print(e)

Exception 源码

class Exception(BaseException):
    """ Common base class for all non-exit exceptions. """
    def __init__(self, *args, **kwargs): # real signature unknown
        pass

    @staticmethod # known case of __new__
    def __new__(*args, **kwargs): # real signature unknown
        """ Create and return a new object.  See help(type) for accurate signature. """
        pass
上一篇下一篇

猜你喜欢

热点阅读