Python基础一天入门

匿名 (未验证) 提交于 2019-12-02 22:51:30

Python 标识符

在 Python 里,标识符由字母、数字、下划线组成。

在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。

Python 中的标识符是区分大小写的。

以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入;

以双下划线开头的_ foo 代表类的私有成员;以双下划线开头和结尾的_ foo 代表 Python 里特殊方法专用的标识,如 init() 代表类的构造函数。

行和缩进

学习 Python 与其他语言最大的区别就是,Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断。python 最具特色的就是用缩进来写模块。

缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。

if True:     print "True" else:     print "False" 

如果没有按照这个缩进格式,那么会报错:

IndentationError: unindent does not match any outer indentation level错误表明,你使用的缩进方式不一致,有的是 tab 键缩进,有的是空格缩进,改为一致即可。

多行语句

Python语句中一般以新行作为语句的结束符。

但是我们可以使用斜杠( \)将一行的语句分为多行显示:

total = item_one + \         item_two + \         item_three 

语句中包含 [], {} 或 () 括号就不需要使用多行连接符

days = ['Monday', 'Tuesday', 'Wednesday',         'Thursday', 'Friday'] 

等待用户输入

下面的程序执行后就会等待用户输入,按回车键后就会退出:

raw_input("按下 enter 键退出,其他任意键显示...\n") 

但是在3.0会出错,因为3.0用input代替了raw_input

标准数据类型

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

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

    str = ‘Hello World!’

    print str # 输出完整字符串
    print str[0] # 输出字符串中的第一个字符
    print str[2:5] # 输出字符串中第三个至第五个之间的字符串
    print str[2:] # 输出从第三个字符开始的字符串
    print str * 2 # 输出字符串两次
    print str + “TEST” # 输出连接的字符串

输出结果:

Hello World! H llo llo World! Hello World!Hello World! Hello World!TEST 

运算符

一个例子看懂Python运算符:

a = 21 b = 10 c = 0  c = a + b print "1 - c 的值为:", c  c = a - b print "2 - c 的值为:", c   c = a * b print "3 - c 的值为:", c   c = a / b print "4 - c 的值为:", c   c = a % b print "5 - c 的值为:", c  # 修改变量 a 、b 、c a = 2 b = 3 c = a**b  print "6 - c 的值为:", c  a = 10 b = 5 c = a//b  print "7 - c 的值为:", c 

输出结果:

1 - c 的值为: 31 2 - c 的值为: 11 3 - c 的值为: 210 4 - c 的值为: 2 5 - c 的值为: 1 6 - c 的值为: 8 7 - c 的值为: 2 

其中需要注意的是整数除整数,只能得出整数。如果要得到小数部分,把其中一个数改成浮点数即可。

** 是幂

//取整

这两个特别注意下

Python 字符串格式化

在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。

print "My name is %s and weight is %d kg!" % ('Zara', 21)  

My name is Zara and weight is 21 kg!

函数

定义函数:

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

    def printme( str ):
    “打印传入的字符串到标准显示设备上”
    print str
    return

可更改(mutable)与不可更改(immutable)对象

在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。

  • 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。
  • 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

python 函数的参数传递:

  • 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
  • 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

全局变量和局部变量

一个例子看懂变量作用域:

total = 0; # 这是一个全局变量 # 可写函数说明 def sum( arg1, arg2 ):    #返回2个参数的和."    total = arg1 + arg2; # total在这里是局部变量.    print "函数内是局部变量 : ", total    return total;  #调用sum函数 sum( 10, 20 ); print "函数外是全局变量 : ", total   函数内是局部变量 :  30 函数外是全局变量 :  0 

global VarName 的表达式会告诉 Python, VarName 是一个全局变量,这样 Python 就不会在局部命名空间里寻找这个变量了。

面向对象

class Employee:    '所有员工的基类'    empCount = 0     def __init__(self, name, salary):       self.name = name       self.salary = salary       Employee.empCount += 1     def displayCount(self):      print "Total Employee %d" % Employee.empCount     def displayEmployee(self):       print "Name : ", self.name,  ", Salary: ", self.salary 
  • empCount 变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 Employee.empCount 访问。
  • 第一种方法init()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
  • self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数

类的方法与普通的函数只有一个特别的区别――它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。self代表类的实例,而非类。

创建实例对象

在 Python 中并没有new关键字,类的实例化类似函数调用方式

"创建 Employee 类的第一个对象" emp1 = Employee("Zara", 2000) "创建 Employee 类的第二个对象" emp2 = Employee("Manni", 5000) 

使用以下函数的方式来访问属性:

  • getattr(obj, name[, default]) : 访问对象的属性。
  • hasattr(obj,name) : 检查是否存在一个属性。
  • setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
  • delattr(obj, name) : 删除属性。

    hasattr(emp1, ‘age’) # 如果存在 ‘age’ 属性返回 True。
    getattr(emp1, ‘age’) # 返回 ‘age’ 属性的值
    setattr(emp1, ‘age’, 8) # 添加属性 ‘age’ 值为 8
    delattr(emp1, ‘age’) # 删除属性 ‘age’

类的继承

  • 1:在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
  • 2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别在于类中调用普通函数时并不需要带上self参数
  • 3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。

你可以使用issubclass()或者isinstance()方法来检测。

  • issubclass() - 布尔函数判断一个类是另一个类的子类或者子孙类,语法:issubclass(sub,sup)
  • isinstance(obj, Class) 布尔函数如果obj是Class类的实例对象或者是一个Class子类的实例对象则返回true。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!