python入门基础、数据类型、函数、类、模块加载、异常

一、python特点总结

1、python是一门多用途的编程语言,时常扮演脚本语言的角色。可定义为面向对象的脚本语言。

2、python的缺点:相对于C++ 执行速度不够快。

3、python解释器:python代码与计算器硬件之间的软件逻辑层。python解释器是运行python程序的程序。

python的执行模式,源代码转换为字节码,字节码在python虚拟机中运行。

字节码是python将程序编译后所得到的底层形式,字节码文件后缀名 .pyc。

4、模块导入和命名空间:模块导入是一种运行代码文件的方法,一般python程序往往由多个模块文件构成,通过import语句链接到一起,每个模块文件是一个独立完整的变量包,即一个命名空间。

5、使用命名行运行 .py文件

python script.py

linux系统下,path目录下没有设置python环境变量,则需要到 /usr/local/bin/python 目录下。

6、代码块

使用冒号(:)指出接下来是一个代码块,并且该代码块中的每行代码都缩进相同的程度

二、python数据类型

Python有五个标准的数据类型:

  • Numbers(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Dictionary(字典)

2.1 数字

数字数据类型用于存储数值。他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。当你指定一个值时,Number 对象就会被创建:

Python支持四种不同的数字类型:

  • int(有符号整型)
  • long(长整型,也可以代表八进制和十六进制)
  • float(浮点型)
  • complex(复数)

2.2 字符串

字符串或串(String)是由数字、字母、下划线组成的一串字符。

字符串是 Python 中最常用的数据类型。我们可以使用引号 ( ' 或 " ) 来创建字符串。

>>> s = 'abcdef'
>>> s[1:5]
'bcde'
str = 'Hello World!'
 
print str           # 输出完整字符串
print str[0]        # 输出字符串中的第一个字符
print str[2:5]      # 输出字符串中第三个至第六个之间的字符串
print str[2:]       # 输出从第三个字符开始的字符串
print str * 2       # 输出字符串两次
print str + "TEST"  # 输出连接的字符串

2.3 列表

List(列表) 是 Python 中使用最频繁的数据类型。列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。

 
list = [ 'runoob', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john']
 
print list               # 输出完整列表
print list[0]            # 输出列表的第一个元素
print list[1:3]          # 输出第二个至第三个元素 
print list[2:]           # 输出从第三个开始至列表末尾的所有元素
print tinylist * 2       # 输出列表两次
print list + tinylist    # 打印组合的列表

输出结果:

['runoob', 786, 2.23, 'john', 70.2]
runoob
[786, 2.23]
[2.23, 'john', 70.2]
[123, 'john', 123, 'john']
['runoob', 786, 2.23, 'john', 70.2, 123, 'john']

2.4 元组

元组是另一个数据类型,类似于 List(列表)。元组用 () 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。

tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 )
tinytuple = (123, 'john')
 
print tuple               # 输出完整元组
print tuple[0]            # 输出元组的第一个元素
print tuple[1:3]          # 输出第二个至第四个(不包含)的元素 
print tuple[2:]           # 输出从第三个开始至列表末尾的所有元素
print tinytuple * 2       # 输出元组两次
print tuple + tinytuple   # 打印组合的元组

输出结果:

('runoob', 786, 2.23, 'john', 70.2)
runoob
(786, 2.23)
(2.23, 'john', 70.2)
(123, 'john', 123, 'john')
('runoob', 786, 2.23, 'john', 70.2, 123, 'john')

2.5 字典

字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象集合,字典是无序的对象集合。

两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。字典用"{ }"标识。字典由索引(key)和它对应的值value组成。

dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"
 
tinydict = {'name': 'runoob','code':6734, 'dept': 'sales'}
 
 
print dict['one']          # 输出键为'one' 的值
print dict[2]              # 输出键为 2 的值
print tinydict             # 输出完整的字典
print tinydict.keys()      # 输出所有键
print tinydict.values()    # 输出所有值

输出结果:

This is one
This is two
{'dept': 'sales', 'code': 6734, 'name': 'runoob'}
['dept', 'code', 'name']
['sales', 6734, 'runoob']

2.6 数据类型转换

函数描述

int(x [,base])

将x转换为一个整数

long(x [,base] )

将x转换为一个长整数

float(x)

将x转换到一个浮点数

complex(real [,imag])

创建一个复数

str(x)

将对象 x 转换为字符串

repr(x)

将对象 x 转换为表达式字符串

eval(str)

用来计算在字符串中的有效Python表达式,并返回一个对象

tuple(s)

将序列 s 转换为一个元组

list(s)

将序列 s 转换为一个列表

set(s)

转换为可变集合

dict(d)

创建一个字典。d 必须是一个序列 (key,value)元组。

frozenset(s)

转换为不可变集合

chr(x)

将一个整数转换为一个字符

unichr(x)

将一个整数转换为Unicode字符

ord(x)

将一个字符转换为它的整数值

hex(x)

将一个整数转换为一个十六进制字符串

oct(x)

将一个整数转换为一个八进制字符串

2.7 python赋值

(1)序列解包

x, y, z = 1, 2, 3
x , y = y, x

(2)链式赋值

x = y = 1

(3)增强赋值

x = 2
x += 1
x *= 2

三、python print用法总结

 3.1 使用{} 

 j = 1
 i = 2
 print('{0}+{1}={2}'.format(j, i, j + i));

输出结果:

1+2=3

3.2 使用%

输出结果:

j = 1
i = 2
print("%d + %d = %d" % (j, i, j + i));

四、python函数

4.1 python函数定义方式

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
def functionname( parameters ):
   "函数_文档字符串"
   function_suite
   return [expression]

 def 函数名(参数列表):
    //实现特定功能的多行代码
    [return [返回值]]

函数的值传递和引用传递:

4. 2 定义不定长参数函数

def functionname([formal_args,] *var_args_tuple ):
   "函数_文档字符串"
   function_suite
   return [expression]

 加了星号(*)的变量名会存放所有未命名的变量参数。不定长参数实例如下:

应用举例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print "输出: "
   print arg1
   for var in vartuple:
      print var
   return
 
# 调用printinfo 函数
printinfo( 10 )
printinfo( 70, 60, 50 )
输出:
10
输出:
70
60
50

4.3 lambda表达式创建匿名函数

lambda [arg1 [,arg2,.....argn]]:expression

举例:

 # 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2
 
# 调用sum函数
print "相加后的值为 : ", sum( 10, 20 )
print "相加后的值为 : ", sum( 20, 20 )

4.4 python 传值和传引用

如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于传址。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用(其实也是对象地址!!!),就不能直接修改原始对象——相当于传值。

所以python的传值和传址是根据传入参数的类型来选择的

传值的参数类型:数字,字符串,元组(immutable)

传址的参数类型:列表,字典(mutable)

 

 五、类

5.1 类的创建于实例化使用方法

# coding: utf-8
# 创建一个类,类名称第一个字母大写,可以带括号也可以不带括号
  
class Student(): 
    student_count = 0 
    def __init__(self, name, salary):
        self.name = name
        self.age = salary
        Student.student_count += 1 
    def display_count(self):
        print('Total student {}'.format(Student.student_count)) 
    def display_student(self):
        print('Name: {}, age: {}'.format(self.name,self.age)) 
    def get_class(self):
        if self.age >= 7 and self.age < 8:
            return 1
        if self.age >= 8 and self.age < 9:
            return 2
        if self.age >= 9 and self.age < 10:
            return 3
        if self.age >= 10 and self.age < 11:
            return 4
        else:
            return  0

 实例化方法:

student1 = Student('cuiyongyuan',10)
student2 = Student('yuanli', 10)
  
student1.display_student()
student2.display_student()
  
student1_class = student1.get_class()
student2_class = student2.get_class()

 实例化过程:

class luffy_stu:
  def __init__(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex
  def eat(self):
    pass
if __name__=="__main__":
  stu1 = luffy_stu('bao',21,'male')

 #1. 是先产生一个stu1对象,

  #2. luffy_stu.__init__('stu1','bao',21,'male')再将stu1对象传入__init__构造函数中实例化对象

5.2 装饰器@staticmethod和@classmethod

@staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。

@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。

使用@staticmethod或@classmethod,可以不需要实例化,直接类名.方法名()来调用。

这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。

class Test(object):

    """docstring for Test"""

    def __init__(self, arg=None):

        super(Test, self).__init__()

        self.arg = arg

    def say_hi(self):

        print 'hello wrold'

    @staticmethod

    def say_bad():

        print 'say bad'

    @classmethod

    def say_good(cls):

        print 'say good'

def main():

    test = Test()

    test.say_hi()

    Test.say_bad() //直接类名.方法名()来调用

    Test.say_good() //直接类名.方法名()来调用

if __name__ == '__main__':

    main()

 六、模块加载

模组,一般称为类库或模块。

模块分为标准模块、第三方模块、自定义模块。

6.1 调用模块

#调用time模块
import time

#直接导入time模块中的ctime()函数
from time import ctime

#导入time模块的所有函数
from time import *

#导入time模块的多个函数
from time import time,sleep

#用as对导入的函数进行重命名
from time imort ctime as sys_time

6.2 引用自定义模块

6.2.1 被引用模块与引用模块在同一级目录

如:

project1/

        ------- calculator.py

        ------- test.py

calculator.py 有函数 add()

def add(a , b);
    return a + b

同一级目录下的 test.py  导入calculator.py 中的 add() 函数;

from calculator import add
    print (add(a , 5))

6.2.2 被引用模块与引用模块不在同一级目录

如:

project1/

-------module/

        ------- calculator.py

-------test/

        ------- test.py

 calculator.py 有函数 add()

def add(a , b);
    return a + b

test.py 需要加载不同目录下模块

import sys
from os.path import dirname, abspath
#_file_ 用于获取文件所在路径,dirname用于获取上级目录
project_path = dirname(dirname(abspath(_file_)))

sys.path.append(project_path+"\\module")
from calculator import add

print(add(2,3))

七、异常处理

 7.1 BaseException 捕获所有异常

try:
    open("abcd.txt", 'r')
    print a
except BaseException as mes:
    print(msg)

7.2 其他异常用法

7.2.1 try except else用法 

没有异常则执行else语句

try:
    open("abcd.txt", 'r')
    print a
except BaseException as mes:
    print(msg)
else:
    print("没有异常时执行")

7.2.2 try except finally用法

不管有没有异常,都会执行 finally语句

try:
    open("abcd.txt", 'r')
    print a
except BaseException as mes:
    print(msg)
finally:
    print("不管是否出现异常,都会被执行")

7.2.3 抛出异常

#定义say_hello()函数
def say_hello(name = None):
    if name is None:
        raise NameError('"name" cannot be empty')
    else:
        print("hello, %s" %name)

#调用say_hello()函数
   say_hello()

 raise关键字可以用来抛出一个异常信息,raise只能使用Python提供的异常类,如果想要raise使用自定义异常类,则自定义异常类需要继承Exception类。

参考文献:

【1】python学习手册(第四版)

【2】Python 变量类型 | 菜鸟教程

【3】 什么是多态,Python多态及用法详解

【4】Python值传递和引用传递(详细分析)_朝歌晚酒南栀雪的博客-CSDN博客_python引用传递和值传递 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值