Python函数之一切皆对象

今天我们要讲的是

对象

避免误会,常老师先澄清一下,这里面说的对象指的是object,不是你的lover,也不是你的sweetheart……

有的小伙伴可能会觉得有点问题,我们这两天不是一直在说函数的事情吗?怎么插播了对象的概念呢?

那是因为常老师觉得函数的基本表达掌握之后,对于对象的理解就显得很重要,否则再往后面看函数的时候,容易蒙圈,【记得常老师在学习最早一门编程语言(C语言)的时候,是在迷迷糊糊看完了面向对象之后,反过来又理解的函数,才恍然大悟。】

所以,今天我们来讲一下对象的概念

什么是对象呢?借用一句名言:一切皆对象

是的,你没看错,你看得见摸得着的,甚至你看不见摸不着的,都是对象(包括你自己)

而Python中,也是使用了一切皆对象的概念。

难道说我们之前写过的所有语句描述的都是某一个对象吗?没错!

就连一个print,一个if,都是在描述一个对象,或者说是在操作某一个对象

举个栗子

你自己,首先就是一个对象,对象由两种元素构成,一种是属性,一种是动作(Python中我们叫做方法)。

我们有一个脑袋、一个鼻子、两只耳朵,这描述的都是我们的属性

我们会走路、会说话、会吃饭,描述的都是我们的方法

延伸到Python中,也是如此

我们可以把a看成是一个对象,定义a=1,等于把a这个值赋予1,那么,如果根据以上理论,是不是a还可以有别的属性或者方法呢?当然是的!就看你想要a干什么,在合理范围内都可以做到。

接下来,我们看一下Python微观世界中完成a=1总共分几步

当我们声明(也叫定义)一个变量a的时候,其实在我们计算机的内存中就开辟了这么一块区域,用来描述a的属性及状态

当我们把1赋值给a的时候(a=1),计算机相当于把1指向了a(如果这里之前学过指针的同学可能会很快理解)

这时候我们使用print(a)的时候,相当于告诉计算机我要输出a的值,这时候当然就会输出1

如果此时我们再把另外一个值10赋给a,那么计算机就会

断开1-->a这个指针,并把1丢弃

重新建立a这个对象并且建立10-->a这个指针

这时候我们再次print(a)的时候就是10了

这里注意第一次声明的a和第二次声明的a,并不是同一个a,如果有的小伙伴问,在这种条件下,如果我们想重新找回a=1可以吗?很抱歉,这是不可以的,当你重新定义了一个相同名称的变量时,之前的同名变量及值就已经被丢弃了(这也是Python垃圾回收机制的一种表现)

我们回顾一下这如此简单的表面现象

为什么会这样呢?因为再Python中,分为不可变类型变量和可变类型变量

不可变类型变量:字符串、数字、元组

可变类型变量:列表、字典

比如下面例子:

首先,我们定义了一个list列表,包含4个值,我们又在列表的后面增加了一个值,所以他的输出应该是

而在这里面,就不是把list这个变量及列表全部丢弃,再重新声明的list列表,而是直接在原有list的基础之上增加了一个元素(这和不可变类型变量不同)

理解了以上内容,各位小伙伴们就会理解在函数传递值的时候,我们实际上是传递了变量本身,还是只传递了变量对应的值。

今天的内容文字描述多了一些,目的是让大家可以快速理解对象的概念,请大家务必理解好今天的概念,这对以后使用复杂函数,传递不定长参数及理解后面的作用域概念的时候十分有帮助,希望大家能够理解,如果有问题可以给我留言,我会一一解答,谢谢大家!

各位亲爱的们,如果您觉得这篇文章还不错,请进行转发,知识的进步需要共享。

本文来自企鹅号 - 全球大搜罗媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI派

如何使用Python颠倒是非黑白?

有没有发现,打印 True 结果是 False,打印 False 结果是 True。是非黑白就在这么一瞬间颠倒了

731
来自专栏带你撸出一手好代码

正则表达式「^」符号的正确理解方式

「^」这个符号在正则表达式的中的应用相信是所有程序员都掌握的, 因为它是正则表达式中最基础最常用的知识点。 它在正则表达式中表示两种不同的意义 01 表示匹配一...

2813
来自专栏用户2442861的专栏

Json概述以及python对json的相关操作

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScr...

722
来自专栏开源优测

Python3希尔排序

希尔排序 概述 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminshing Increment Sort),是直接插入排序算...

35110
来自专栏C语言C++游戏编程

世界最强的编程语言:C语言

char:字符型,用来存储小范围的整数(-128~127)和字符(所有的ASCII字符,128个),一个字节。

1442
来自专栏大前端开发

ES6特性之:参数默认值

作为一个开发者,跟进行业步伐是非常需要的,不能躺在现有的知识和经验温床上做美梦。JavaScript的ES2015标准(即我们说的ES6)在2016年已经被广泛...

854
来自专栏点滴积累

python通过一个语句分析几个常用函数和概念

前言 过年也没完全闲着,每天用一点点时间学点东西,本文为大家介绍几个python操作的细节,包含all、any、for in等操作,以及介绍我解决问题的思路。 ...

2785
来自专栏cmazxiaoma的架构师之路

Java数据结构与算法(4) -冒泡排序

1835
来自专栏趣谈编程

直接插入排序

登鹳雀楼 唐·王之涣 白日依山尽,黄河入海流。  欲穷千里目,更上一层楼。 面试官:聊聊插入排序 插入排序是一种比较简单直观的排序算法,适用处理数据量比...

4035
来自专栏用户2442861的专栏

c++ 11 新特性

赖勇浩(http://laiyonghao.com) 声明:本文源自 Danny Kalev 在 2011 年 6 月 21 日发表的《The Bigges...

871

扫码关注云+社区

领取腾讯云代金券