函数调用

python 2 类与对象

▼魔方 西西 提交于 2020-03-09 04:18:06
1、类与对象的概念 类即类别、种类,是面向对象设计最重要的概念,从一小节我们得知对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体。 那么问题来了,先有的一个个具体存在的对象(比如一个具体存在的人),还是先有的人类这个概念,这个问题需要分两种情况去看 (1)在现实世界中:肯定是先有对象,再有类 世界上肯定是先出现各种各样的实际存在的物体,然后随着人类文明的发展,人类站在不同的角度总结出了不同的种类,比如 人类、动物类、植物类等概念。也就说,对象是具体的存在,而类仅仅只是一个概念,并不真实存在,比如你无法告诉我人类 具体指的是哪一个人。 (2)在程序中:务必保证先定义类,后产生对象 这与函数的使用是类似的:先定义函数,后调用函数,类也是一样的 :在程序中需要先定义类,后调用类 。不一样的是:调用 函数会执行函数体代码返回的是函数体执行的结果,而 调用类会产生对象,返回的是对象 1>把一类事物的静态属性和动态可以执行的操作组合在一起所得到的这个概念就是类 2>类的一个个体就是对象,对象是具体的,实实在在的事物 3>对象是特征与技能的结合体,其中特征和技能分别对应对象的数据属性和方法属性 4>对象(实例)本身只有数据属性,但是python的class机制会将类的函数绑定到对象上,称为对象的方法,或者叫绑定方法,绑定方法唯一绑定一个对象,同一个类的方法绑定到不同的对象上

Python面向对象

与世无争的帅哥 提交于 2020-03-09 02:59:31
1.__init__的方法 2.属性查找 3.属性的调用 4.绑定关系 5.面向对象三大特性之一:继承与派生 知识点一:__init__方法应用 1.1__init__方法常规格式及操作 class OldboyStudent: school='odlboy' def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex stu1=OldboyStudent('杨智宗',27,'male') #stu1对象名称空间的内容 #查看对象名称空间的内容(查) print(stu1.name,stu1.age,stu1.sex) #杨智宗 27 male print(stu1.__dict__) #{'name': '杨智宗', 'age': 27, 'sex': 'male'} #对象名称空间增加内容(增) stu1.father='杨俊杰' # {'name': '杨智宗', 'age': 27, 'sex': 'male', 'father': '杨俊杰'} print(stu1.__dict__) #改对象名称空间的内容 (改) #{'name': '杨智宗', 'age': 27, 'sex': 'male', 'father': '杨俊杰'} stu1.age=66 print(stu1._

c++面向对象高级编程 学习四 静态、类模板、函数模板

断了今生、忘了曾经 提交于 2020-03-09 00:42:34
静态static:静态数据和静态函数,在内存中只有一份,不会随着创建对象的数目的增加而增加 static数据 :比如银行的account类中,账户名是普通数据,100个对象会有100个账户名,但利率都是相同的,因此利率可以设置为static static函数 :static函数和其他一般成员函数相比,static函数没有this指针,因此它不能处理类中的一般数据,只能处理static数据 static数据,需要在类外面进行定义。 调用static函数的两种方式:(1)通过object调用(2)通过class name调用 class Account { public : static double m_rate ; //声明 static void set_rate ( const double & x ) { m_rate = x ; } } ; double Account :: m_rate = 8.0 ; //定义 int main ( ) { Account :: set_rate ( 5.0 ) ; //通过class name调用 Account a ; a . set_rate ( 7.0 ) ; //通过object调用 } 单例模式的例子: class A { public : static A & getInstance ( ) ; setup ( ) { .

TCP超时设置

China☆狼群 提交于 2020-03-08 18:48:30
  在学习TCP超时设置的时候,发现网上没有完整的超时介绍,遂总结一下。TCP超时总共分为3类:connectTimeout, writeTimeout, readTimeout(连接超时,读超时,写超时)。下面分别介绍如何设置这三种超时。 1. 连接超时   在TCP调用connect函数时,TCP的建立需要3次握手,从客户端发出SYS信号之后开始等待,超过超时时间即连接失败,connect函数不再等待,直接返回。这个时间称为超时时间。超时时间系统是有最大限制的,以Linux系统为例,调用命令:sysctl net.ipv4.tcp_syn_retries可以查看系统设置的connectTimeout最大值。返回值: 4:timeout是31s 5: timeout是75s 6: timeout是127s 但是有时我们希望设置自己的connectTimeout时间(注:此时间必须比系统timeout时间短,否则系统会截成系统timeout时间)。 1.1 使用alarm函数 在设置超时时间时,可以采用alarm函数,具体如下: //超时处理函数 void alarm_handler(int sig) { printf("connect timeout"); return; } int main() { ... signal(SIGALRM, alarm_handler)

openstack_ice之wsgi详解(paste从ini配置文件->routesr具体发布流程)

ぐ巨炮叔叔 提交于 2020-03-08 18:34:44
感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正! 如有转载,请保留源作者博客信息。 Better Me的博客 : blog.csdn.net/tantexian 如需交流,欢迎大家博客留言。 对Restful API有了一个基础的了解,那么我们来看通过URL是怎样映射到具体的应用程序操作函数上了。在OpenStack中的API Daemon都会有一个Router类,来构建资源与URL直接的映射关系,完成从接收到URL请求然后映射到具体的函数上执行的整个过程。 这就要了解Python 中的Routes模块。 Routes 是一个python重新实现的Rails routes system,用来将urls映射到应用具体的action上,相反的,还生成url。由于Routes是Rails routes system的python实现,并且网上关于Routes的文档很少,故从rails的routes system入手,就能很好的理解Routes库了。 首先看一个简单的例子,就明白routes的作用, 例如浏览器接收到下面的HTTP请求, GET /instances/1 Rails的路由请求则负责将此请求解析后dispatch来代码中的具体某个函数,完成调用,例如返回虚拟机的信息。 第一部分:讲解wsgi的调用入口(paste)

Effective C++ 学习笔记

别等时光非礼了梦想. 提交于 2020-03-08 13:46:07
1. 基础部分 Item 1: View C++ as a federation of languages. 对于内建类型,按值传递优于按引用传递,对于自定义类型则相反。 C++可视为4中子语言的联合:C,Object-Oriented C++,Template C++和STL。 Item 2: Prefer consts, enums, and inlines to #defines. 只有整型常量可以在类声明里面初始化: class Klass { const static int num = 1 ; //也可只声明,在定义文件中,即类外部定义、初始化; }; enum类型也可以在类内部初始化。 Item 3: Use const whenever possible. 对于指针p,const在 * 左边时,p指向的值为常量,const出现在 * 右边时,p指向的地址为常量。 const int * p1 ; int const * p2 ; int * const p3 ; ​ //以上代码,p1和p2一样,其指向的值为常量;p3指向的地址为常量 如果类Klass有同名的两个成员函数foo,其中一个为const类型,那么const实列优先调用const版的foo。 const函数不能改变非static的成员变量。 mutable修饰的成员,在const函数中也可以改变其值。

Unity C#笔记 协程详解(转)

ε祈祈猫儿з 提交于 2020-03-08 13:00:47
目录 什么是协程 多线程 协程 协程的使用场景 协程使用示例 Invoke的缺陷 协程语法 开启协程 终止协程 挂起 协程的执行原理 什么是协程 在Unity中,协程(Coroutines)的形式是我最喜欢的功能之一,我都会使用它来控制需要定时的。 协同程序,在主程序运行的同时,开启另外一段逻辑处理,来协同当前程序的执行。 可能看了这段文字介绍还是有点模糊,其实可以用多线程来比较。 多线程 多线程,顾名思义,多条同时执行的线程。 最初,多线程的诞生是为了解决IO阻塞问题,如今多线程可以解决许多同样需要异步方法的问题(例如网络等)。 所谓异步,通俗点讲,就是我走我的线程,你走你的线程。当某个线程阻塞时,另一个线程不会受影响继续执行。 需要认识到的是,多线程并不是真正意义上的多条线程同时执行。 它的实际是将一个时间段分成若干个时间片,每个线程轮流运行一个时间片。 (如图,将执行步骤切分成极小的粒度,然后依次运行) 但是由于时间片粒度非常非常小,几乎看不出区别,所以程序执行效果跟真正意义上的并行执行效果基本一致。 多线程的缺陷 然而多线程有一个坏处,就是可能造成共享数据的冲突。 假如有一个变量i = 0, Step1_1的操作是进行++i操作,Step2_1的操作是进行--i操作。 我们预期最终结果i为0。 但由于操作切分得过小,可能会发生这样顺序的事: 线程1:访问i, 将0存到寄存器

fork函数详解

六月ゝ 毕业季﹏ 提交于 2020-03-08 12:54:06
一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。 我们来看一个例子: /* * fork_test.c * version 1 * Created on: 2010-5-29 * Author: wangth */ #include <unistd.h> #include <stdio.h> int main () { pid_t fpid; //fpid表示fork函数返回的值 int count=0; fpid=fork(); if (fpid < 0) printf("error in fork!"); else if (fpid == 0) { printf("i am the child process, my process id is %d/n",getpid()); printf("我是爹的儿子/n");//对某些人来说中文看着更直白。 count++; } else { printf("i am the

RPC原理

佐手、 提交于 2020-03-08 08:23:04
今天开始聊一些微服务的实践,第一块,RPC框架的原理及实践,为什么说要搞定微服务架构,先搞定RPC框架呢? 一、需求缘起 服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队的技术解耦,如下图: 服务A是欧洲团队提供服务,欧洲团队的技术背景是Java,可以用Java实现服务; 服务B是美洲团队提供服务,可以用C++实现服务; 服务C是中国团队提供服务,可以用Go实现服务; 服务的上游调用方,按照接口、协议即可完成对远端服务的调用。 但实际上,99.9%的公司的团队规模有限,技术团队人数也有限,基本是使用同一套技术体系来调用和提供服务的: 这样的话,如果没有统一的服务框架,RPC框架,各个团队的服务提供方就需要各自实现一套序列化、反序列化、网络框架、连接池、收发线程、超时处理、状态机等“业务之外”的重复技术劳动,造成整体的低效。所以,统一RPC框架把上述“业务之外”的技术劳动统一处理,是服务化首要解决的问题。 在达成【“使用统一的RPC框架”是正确的道路】这个一致的前提下,本文期望用简单通俗的言语简述一下一个通用RPC框架的技术点与实现。 二、 RPC 背景与过程 什么是RPC(Remote Procedure Call Protocol),远程过程调用? 先来看下什么是本地函数调用,当我们写下: int result = Add(1, 2);

C++面试题

时光怂恿深爱的人放手 提交于 2020-03-08 08:06:32
语言基础类 1. 指针和引用的区别? (1)指针有自己的一块空间,而引用只是一个别名;  (2)使用 sizeof 看一个指针的大小为 4 字节(32位,如果要是64位的话指针为8字节),而引用则是被引用对象的大小。 (3) 引用必须在定义时被初始化,指针不必; (4)不存在指向空值的引用,但存在指向空值的指针。 2.static和 const的用法,(能说出越多越好)(重点) 首先说说const的用法(绝对不能说是常数) 1.限定变量为不可修改。 2.限定成员函数不可以修改任何数据成员。 3.使用const关键字修饰的变量,一定要对变量进行初始化 下面的声明都是什么意思? const int a; a是一个常整型数 int const a; a是一个常整型数 const int *a; a是一个指向常整型数的指针,整型数是不可修改的,但指针可以 int * const a; a为指向整型数的常指针,指针指向的整型数可以修改,但指针是不可修改的 int const * a const; a是一个指向常整型数的常指针,指针指向的整型数是不可修改的,同时指针也是不可修改的 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。