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!')