1.前言                                                                                              

  前面讲了一些关于python的一些基本的语法及语句,在这个地方继续讲python的方法及其python核心概念的面向对象。我们都知道python被称为面向对象的语言,那么在这里我们将正式的接触 的python的核心。

2.函数                                                                                              

  定义:是可调用的,执行某种行为并返回一个值。判断一个函数是否可以调用,可以使用内置的callable函数。在下面的列子中,x返回false,cal返回true。  

 def cal():
return 'function'
x=1 print(callable(x))
print(callable(cal))

  在上面的函数中,我们可以在括号中指定参数名称,这样就能把我们需要的参数传递到方法函数中。但在传递参数过程中,我们需要注意函数的作用域,即当前函数在某一段代码中起作用,在其他中无法访问。两个相同的值的变量,在表面现象,我们看起来吃相等的,但是实际在程序中他们是不等。对于在函数中赋值,同样会存在一个这个问题。例如:  

 names=['a','b','c']
n=names[:] print(n is names) print(n==names)

  在 ‘n is names’返回false,而‘n==names’返回true。表面上我们看到的时候n和names的值相等,但是n不一定就是names,这里会涉及到引用的一个问题,我们在创建一个变量时,系统会自动为他分配一个相当于是一个唯一的标识,同理,在这个地方,我们同时创建了n和names,系统会分配不同的标识,虽然n是通过names赋值的。但在这里只能说他们的值相等,而不能说n就是names。

  现在我们在函数中传递的参数都叫做位置参数,因为他们的位置是不可变的,如果将位置改变之后,那在对应调用函数时,传递参数的值的位置也需要发生改变,否则会发生参数传递错误的现象。在python中,我们可以对函数的参数赋默认值,这样当在调用函数时,如果不需要参入自己想要的参数,那么可以不传。方式为在参数后面紧跟默认值。

  递归

   在函数中,函数可以调用其它函数,但是也可以调用自己本身。对于调用自己本身的函数,我们一般称之为为递归。

  在递归函数中主要包含两部分:

    1.当函数之间返回值时,有基本实例

    2.递归实例,包括一个或者多个问题较小部分的递归引用

  关键在于将问题分解为小部分,递归不能永远的执行下去,否则就成了所谓的死循环。因为在递归中总以最小可能性问题结束,而这些问题有存储在基本实例中。    

 '''
阶乘
'''
def factorial(n):
if n==1:
return n
else:
return n*factorial(n-1) '''

'''
def power(x,n):
if n==0:
return 1;
else:
return x*power(x,n-1)

3.面向对象                                                                                        

  对象:可以看作数据(特性)以及由一系列以存取/操作这样数据的方法所组成的集合。使用对象替代全局变量和函数的原因有很多,其中对象最重要的优点主要在以下几方面:

    1.多态,可以将不同类的对象使用同样的操作

    2.封装,对外部世界隐藏对象的工作细节

    3.继承:以通用的类为基础建立专门的类对象

  多态:不知道变量所引用的的对象类型是什么,还是能对它进行操作,而它也会根据对象(或类)类型的不同而表现出不同的行为。isinstance进行类型/类的检查

  方法:绑定到对象特性上面的函数

  封装:向程序中的其他部分隐藏对象的具体实现细节的原则

    方法和函数的区别在于第一个参数是否为self。在类中的方法,默认第一个参数为self,特指当前的引用,而方法咋没有。

4.异常                                                                                              

  在程序中,我们经常会遇到一些临界的界点情况,比如除数为0等情况。默认的解决办法是在进行操作之前,对数据进行判断筛选,但是当情况比较多的时候,这个时候做验证时就比较麻烦,而且不易于可读。在python中,存在一种异常处理的机制,使用try ..............  except来进行异常的捕获处理。在正常的程序中,我们也可以使用raise来触发一个异常,结束当前的操作。

  python中自置了比较常用的几种异常,但是它的基类为exception,我们可以手动的扩展异常的类型,来丰富我们的异常处理。当然我们也可以直接使用基类exception直接捕获异常,通过try............except Exception, e    使用对象e来输出异常的信息。

  在异常处理中,先执行try中的语句块,若触发了异常,则执行except中的语句块。但是在我们读取文件时,我们会打开一系列的对象,若这时触发了异常,不手动关闭这些对象时,会造成内存一定的损耗。为了避免这种情况,可以在except后添加finally。即不管前面执行如何,最后都会执行finally的语句块。这样就避免了内存的损耗。           

5.写在最后                                                                                        

  由于前期的文章都是先前自己看完的,在这之前的文章,都只是走马观花的看了一次,并再一次对自己做了一个总结。对于后续的文章,需要自己边看边思考边理解,可能文章更新的进度比较慢,尽量保证每周2篇,还请大家谅解。若在文中有什么没讲清楚或者存在错误的地方,希望大家多多批评指出,多多交流,大家共同进步。

  如果对你有一定的帮助,麻烦点个

    若需要转载,请标明出处!

Python基础系列----函数,面向对象,异常的更多相关文章

  1. python基础系列教程——Python3.x标准模块库目录

    python基础系列教程——Python3.x标准模块库目录 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata ...

  2. python基础系列教程——Python中的编码问题,中文乱码问题

    python基础系列教程——Python中的编码问题,中文乱码问题 如果不声明编码,则中文会报错,即使是注释也会报错. # -*- coding: UTF-8 -*- 或者 #coding=utf-8 ...

  3. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  4. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  5. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  6. python基础——filter函数

    python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...

  7. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

  8. 八. Python基础(8)--函数

    八. Python基础(8)--函数 1 ● 函数返回布尔值 注意, 自定义的函数也可以是用来作逻辑判断的, 例如内置的startswith()等函数. def check_len(x):     ' ...

  9. python基础系列教程——Python库的安装与卸载

    python基础系列教程——Python库的安装与卸载 2.1 Python库的安装 window下python2.python3安装包的方法 2.1.1在线安装 安装好python.设置好环境变量后 ...

随机推荐

  1. javascript功能封装

    实现方式其实很简单,我在代码打上注释,大家就懂了!    var _date=[],dateData=["1月","2月","3月",&qu ...

  2. 基于tcp交互的python聊天程序

    语言:Python 工具:MySQL,Tkinter,图灵机器人 功能:图形聊天工具,可以选择自动回复或者人工回复. 注意:如果运行需要自建mysql数据库表.还有安装各种模块.还有到“图灵机器人”申 ...

  3. ZooKeeper概述(三)

    ZooKeeper:分布式应用的分布协调服务 ZooKeeper是一个为分布式应用提供的分布的开源的协调服务.它暴露一组简单的原子操作,分布式系统可以在这之上为同步,配置管理,和组和命名实现更高级的服 ...

  4. 【bzoj3476-懒惰的奶牛】线段树

    题解: 感觉这题和别人的做法不一样...呵呵呵...调了一百年.. 设家坐标为(a,b),对于每个点(x,y),可以转化为|a-x|+|b-y|<=k 对于每个点,它的影响范围是一个菱形(也就是 ...

  5. 【BZOJ】1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名

    [题意]给定n头牛和m对大小关系,求最坏情况下至少还需要比较几对奶牛的大小(在未确定顺序的奶牛对中随机比较) [算法]floyd求传递闭包 [题解]可达说明大小已知,则不可达点对数量就是最少比较次数. ...

  6. UIPageControl---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

  7. C#读取txt文件时中文乱码

    解决办法 使用GB2312中文字符集 StreamReader reader = new StreamReader(txtUrl, Encoding.GetEncoding("gb2312& ...

  8. 【转】bmp文件格式详解

    先区分几个概念:16色和16位色一样吗? 不一样! 颜色位数,即是用多少位字节表示的值,每一位可以表示0和1两值.通常图片的颜色深度,简称色深,就是用位数来表示的,所以,我通常会看到8位色,16位色, ...

  9. gcc中的内嵌汇编语言(Intel i386平台)

    [转]http://bbs.chinaunix.net/thread-2149855-1-1.html 一.声明  虽然Linux的核心代码大部分是用C语言编写的,但是不可避免的其中还是有一部分是用汇 ...

  10. 使用cURL POST上传文件

    使用cURL POST上传文件 http://blog.csdn.net/v6543210/article/details/20152575