Python基础学习--1

1.
>>>print s1[:5]             # 从开始到下标4 (下标5的元素 不包括在内)

>>>print s1[2:]             # 从下标2到最后

>>>print s1[0:5:2]          # 从下标0到下标4 (下标5不包括在内),每隔2取一个元素 (下标为0,2,4的元素)

>>>
 
看下例:
a = 1

def change_integer(a):
    a = a + 1
    return a

print change_integer(a)      #注意观察结果
print a      #注意观察结果

#===(Python中 "#" 后面跟的内容是注释,不执行 )

b = [1,2,3]

def change_list(b):
    b[0] = b[0] + 1
    return b

print change_list(b)      #注意观察结果
print b      #注意观察结果

print s1[2:0:-1] # 从下标2到下标1

第一个例子,我们将一个整数变量传递给函数,函数对它进行操作,但原整数变量a不发生变化。

第二个例子,我们将一个表传递给函数,函数进行操作,原来的表b发生变化。

对于基本数据类型的变量,变量传递给函数后,函数会在内存中复制一个新的变量,从而不影响原来的变量。(我们称此为值传递)

但是对于表来说,表传递给函数的是一个指针,指针指向序列在内存中的位置,在函数中对表的操作将在原有内存中进行,从而影响原有变量。 (我们称此为指针传递),指针是C/C++语言中的重要概念,如下:

简单的来说就是,在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误!
#include<string>
using namespace std;
class String
{
private:
	char *m_str;
public:
	String(){};
	//浅拷贝
	String & operator =(const String s)
	{
		m_str = s.m_str;
		return *this;
	}
	//深拷贝
	String & operator =(const String&rhs)
	{
		if(this == &rhs)
			return *this;
		delete [] m_str;
		m_str = new char[strlen(rhs.m_str)+1];
		strcpy(m_str,rhs.m_str);
		return *this;
	}
	String(const char * str)
	{
		if(str == NULL)
		{
			m_str = new char[1];
			m_str[0]='\0';
		}else
		{
			m_str = new char[strlen(str)+1];  
			strcpy(m_str, str); 
		}
	}
	String(const String &rhs)
	{
		m_str = new char[strlen(rhs.m_str)+1];  
		strcpy(m_str, rhs.m_str); 
	}
};
二.面向对象编程
__init()__()方法,创建对象时,Python会自动调用这个方法。这个过程也叫初始化
class happyBird(Bird):
    def __init__(self,more_words):
        print 'We are happy birds.',more_words
summer = happyBird('Happy,Happy!')




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值