精华内容
下载资源
问答
  • 基本数据类型包括数值型、布尔型和字符串类型, 复杂数据类型包括数据组(ARRAY)、映射(MAP)、结构体(STRUCT)和共同体(UNION).   其中,基础数据类型包括:TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,...

    Hive支持的数据类型分为两类,即基本数据类型和复杂数据类型.

    基本数据类型包括数值型、布尔型和字符串类型,

    复杂数据类型包括数据组(ARRAY)、映射(MAP)、结构体(STRUCT)和共同体(UNION).

     

    其中,基础数据类型包括:TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBLE,STRING,BINARY,TIMESTAMP,DECIMAL,CHAR,VARCHAR,DATE。下面的表格列出这些基础类型所占的字节以及从什么版本开始支持这些类型。

     

    数据类型 所占字节 开始支持版本
    TINYINT 1byte,-128 ~ 127  
    SMALLINT 2byte,-32,768 ~ 32,767  
    INT 4byte,-2,147,483,648 ~ 2,147,483,647  
    BIGINT 8byte,-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807  
    BOOLEAN    
    FLOAT 4byte单精度  
    DOUBLE 8byte双精度  
    STRING    
    BINARY   从Hive0.8.0开始支持
    TIMESTAMP   从Hive0.8.0开始支持
    DECIMAL   从Hive0.11.0开始支持
    CHAR   从Hive0.13.0开始支持
    VARCHAR   从Hive0.12.0开始支持
    DATE   从Hive0.12.0开始支持

     

    复杂类型包括ARRAY,MAP,STRUCT,UNION,这些复杂类型是由基础类型组成的。

      ARRAY:ARRAY类型是由一系列相同数据类型的元素组成,这些元素可以通过下标来访问。比如有一个ARRAY类型的变量fruits,它是由['apple','orange','mango']组成,那么我们可以通过fruits[1]来访问元素orange,因为ARRAY类型的下标是从0开始的;
      MAP:MAP包含key->value键值对,可以通过key来访问元素。比如”userlist”是一个map类型,其中username是key,password是value;那么我们可以通过userlist['username']来得到这个用户对应的password;
      STRUCT:STRUCT可以包含不同数据类型的元素。这些元素可以通过”点语法”的方式来得到所需要的元素,比如user是一个STRUCT类型,那么可以通过user.address得到这个用户的地址。
      UNION: UNIONTYPE,他是从Hive 0.7.0开始支持的。

    展开全文
  • js数据类型(基本数据类型 | 引用数据类型

    千次阅读 多人点赞 2020-08-06 16:46:45
    一、数据类型 JS分两种数据类型: 基本数据类型:**Number、...基本数据类型是指存放在栈中的简单数据段,数据大小确定,内存空间大小可以分配,它们是直接按值存放的,所以可以直接按值访问 1、Number数值类型 Num

    一、数据类型

    JS分两种数据类型:

    基本数据类型:**Number、String、Boolean、Null、 Undefined、Symbol(ES6),**这些类型可以直接操作保存在变量中的实际值。

    引用数据类型Object(在JS中除了基数据类型以外的都是对象,数据是对象,函数是对象,正则表达式是对象)

    1、基本数据类型(六种)存放在栈中

    基本数据类型是指存放在中的简单数据段,数据大小确定,内存空间大小可以分配,它们是直接按值存放的,所以可以直接按值访问

    • 1、Number数值类型
      Number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后面至少有一个数字)两种值

    注意:在js中浮点数的精度是17位,计算是二进制的计算数 据,所以得到的不是整数

    var num1 = 0.1;
    
    var num2 = 0.2;
    
    console.log(num1 + num2);   //0.30000000000000004
    

    NaN:非数字类型,属于数值型基本数据类型

    特点:
    1):设计任何的NaN操纵都会返回NaN
    console.log('ab'/10); // NaN
    2) NaN不等于自身。
    console.log(NaN == NaN);// false;

    判断是否是Number类型

    1、isNaN:判断是否是一个非数字类型,传入的非数字类型,返回true,否则返回false
    注意:传入的参数首先会被转化为数值,如果参数类型为对象类型,先调用valueOf()方法,再确定该方法返回的值是否可以转换为数值类型,如果不能,再调用toString()方法,再确定返回值
    2、typeof
    console.log(typeof 12) //Number

    数值类型的转换:
    Number():可以用于任何的数据类型
    parseInt:提取 整数数值
    paseFloat:提取浮点数值

    • 2、String 字符串类型

    特点:
    1、字符串的单引号和双引号作用效果一样
    2、字符串有length属性,可以取得字符串的长度
    3、字符串的值是不可变的,所以很多的字符串的api不会改变原字符串值

    字符串转换:
    String():适用于任何的数据类型(null -> null undefined -> undefined)
    toString()nullundefined没有这个功能
    console.log(null.toString()); //error 报错

    • 3、Boolean 布尔类型
      该类型只有两个值:truefalse
    转换为`boolean`:    `Boolean()`
    Boolean(undefined):false
    
    Boolean(null):false
    
    Boolean(非空对象包括空数组[]和空对象{}):true
    
    Boolean(0): true || Boolean(0NaN):false
    
    Boolean(非空包括空格字符串):true || Boolean(''):false
    
    [注意]true不一定等于1false也不一定等于0
    

    出现场景:
    (1)条件语句导致执行的隐士类转换
    (2)字面量或变量定义

    类型转换:
    Number(true): 1     ||   Number(false) : 0
    
    String(true):'true'      ||   String(false):'false'
    
    • 4、Null 空对象指针类型
      如果定了一个对象,初始化可以为null,因为null的基本类型是Null,在if语句中默认转化为false,在和数值计算默认为0
      出现场景:对象不存在
    类型转换:
    Booleam(null)  false
    
    Number(num)  0
    
    String(null)  'null'
    

    Number(null) // 0

    • 5、Undefined
      申明了变量但是没有初始化,默认为undefined,在if语句中默认转化为false,

    undefined:表示‘缺少值’,就是应该有一个值,但是没有定义,以下用法是典型的出现undefined情况
    (1)变量被申明,等于undefined
    (2)调用函数时,应该提供的参数没有提供,该参数等于undefined
    (3)对象没有赋值的属性,该属性值为undefined
    (4)函数没有返回值,默认返回undefined

    类型转换:
    Boolean(undefined):  false
     
    Number(undefined):  NaN
    
    String(undefined):  'undefined'
    
    • 6、Symbol
      ES6新增的一个基本数据类型,表示唯一性
     let id1 = Symbol('id');
     let id2 = Symbol('id');
     console.log(id1 == id2);  //false
    

    Symbol属性类型不支持for...inObject.keys()

     let id = Symbol("id");
     let obj = {
      [id]:'symbol'
     };
     for(let option in obj){
         console.log(obj[option]); //空
     }
    

    但是也能有方法去访问:Object.getOwnPropertySymbols
    方法会返回一个数组,成员是当前对象的所有用作属性名的 Symbol 值。

    console.log(Object.getOwnPropertySymbols(obj))
    // [ Symbol(c) ]
    
    • 介绍两个Symbol.forSymbol.keyFor
      (1)、Symbol.for :方法根据给到的键key来运行时的symbol注册表中找到对应的symbol,如果找到了,则返回它,否则新增一个与该键关联的symbol,并放入全局的symbol,这个Symbol值可以是被二次用到的
      返回值:
      返回由给定的 key 找到的 symbol,否则就是返回新创建的 symbol。
    Symbol.for("foo"); // 创建一个 symbol 并放入 symbol 注册表中,键为 "foo"
    Symbol.for("foo"); // 从 symbol 注册表中读取键为"foo"的 symbol
    
    Symbol.for("bar") === Symbol.for("bar"); // true,证明了上面说的
    Symbol("bar") === Symbol("bar"); // false,Symbol() 函数每次都会返回新的一个 symbol
    
    为了防止冲突,最好给你要放入 symbol 注册表中的 symbol 带上键前缀。
    Symbol.for("mdn.foo");
    Symbol.for("mdn.bar");
    
    

    (2)、Symbol.keyFor
    方法用来获取 symbol 注册表中与某个 symbol 关联的键。

    var globalSym = Symbol.for("foo"); 
    Symbol.keyFor(globalSym); // "foo"
    

    2、引用数据类型

    引用数据类型也叫对象数据类型,包括function,object,array,date,RegExp等可以可以使用new创建的数据,又叫对象类型,他们是存放在(heap)内存中的数据
    特点:

    • 引用类型的值可以改变
    • 引用数据类型可以添加属性和方法
    • 引用数据类型的赋值是对象引用
    • 引用类型的比较是引用的比较
    • 引用类型是同时保存在栈区中和堆区中的,引用类型的存储需要在内存的栈区和堆区中共同完成,栈区保存变量标识符和指向堆内存的地址

    注意:在引用类型赋值时对象的引用,所以从一个变量向另一个变量赋值引用类型的值时,同样会将存在在变量中的对象的值赋值一份到新的变量分配的空间,引用类型保存在变量中的时对象在堆存在的地址,所以与基本数据类型的简单赋值不同,这个值的副本实际上时一个指针,而这个指针指向储存在堆内存的一个对象,那么赋值操作后,两个变量都保存了同一个对象的地址,而这个地址都指向同一个对象,因此改变其中任何一个变量,都会影响
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jbmIM5T9-1596703084649)(images/screenshot_1595230430200.png)]

    在ECMAScript中,Object类型是所有它的实例的基础

    Object的每个实例都具有下列的属性和方法:

    • constructor:构造函数
    • hasOwnProperty(proertyName)
      用于检查给定的属性在当前对象实例(而不是实例的原型)中是否存在。
    • isPropertyOf(Object)
      用于检查其原型链的对象是否存在于指定对象的实例中,是则返回true,否则返回false。
    var a = {} function Person() {} 
    
    var p1 = new Person() // 继承自原来的原型,但现在已经无法访问  
    
    var Person.prototype = a var p2 = new Person() // 继承a  
    
    console.log(a.isPrototypeOf(p1)) // false a是不是p1的原型 
    
     console.log(a.isPrototypeOf(p2)) // true a是不是p2的原型  
    
    console.log(Object.prototype.isPrototypeOf(p1)) // true  
    
    console.log(Object.prototype.isPrototypeOf(p2)) // true
    
    
    • propertyIsEnumerable(propertyName)
      用于检查给定的属性是否可以用 for-in 语句进行枚举。
    • toLocaleString()
      返回对象的字符串表示,该字符串与执行环境的地区对应。
    • toString()
      返回对象的字符串表示。
    • valueOf()
      返回对象的字符串、数值、布尔值表示。通常与toString()方法的返回值相同。
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ncTTVVzi-1596703084652)(images/screenshot_1595228465109.png)]

    拓展:声明对象的几种方式

     <script>
    //内置函数
            var obj1=new Object();
            obj1.name="zhuyu";
            obj1.age=21;
            obj1.uni=function(){
                console.log(this.name+this.age);
            }
            console.log(obj1);
            obj1.uni();
     
    //字面量
            var obj2={
                name:"zhuyu2",
                age:21,
                uni2:function(){
                    console.log(this.name+this.age)
                }
            }
            console.log(obj2);
            obj2.uni2();
     
     
    // 自定义函数
            function Obj(name,age){
                this.name=name;
                this.age=age;
                this.uni3=function(){
                    console.log(this.name+this.age)
                }
            }
            var obj3=new Obj("zhuyu3",21);
            console.log(obj3);
            obj3.uni3();
     
    // Es6类
     
            class Obj2{
                constructor(name,age){
                    this.name=name;
                    this.age=age;
                }
                uni4(){
            console.log(this.name+this.age)
                }
            }
            var obj4=new Obj2("zhuyu4",21);
            console.log(obj4);
            obj4.uni4();
     
    //使用Object.create()
     
            var person={
                image:"true",
                uni5:function(){
                    console.log(`名字是${this.name},年龄是${this.age}`);
                }
            }
           var obj5=Object.create(person);
           obj5.name="zhuyu5";
           obj5.age=21;
           obj5.image=false;
           obj5.uni5();
           console.log(obj5)
        </script>
    

    3、基本数据类型和引用数据类型的区别

    总结基本数据类型和引用数据类型区别

    1、声明变量时内存分配不同

    *原始类型:在栈中,因为占据空间是固定的,可以将他们存在较小的内存中-栈中,这样便于迅速查询变量的值
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MXBAdxMe-1596703084654)(images/screenshot_1595226759783.png)]

    *引用类型:存在堆中,栈中存储的变量,只是用来查找堆中的引用地址。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UsfodwlF-1596703084656)(images/screenshot_1595226765978.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1467GOxa-1596703084658)(images/screenshot_1595227087417.png)]

    这是因为:引用值的大小会改变,所以不能把它放在栈中,否则会降低变量查寻的速度。相反,放在变量的栈空间中的值是该对象存储在堆中的地址。地址的大小是固定的,所以把它存储在栈中对变量性能无任何负面影响

    2、不同的内存分配带来不同的访问机制

    在javascript中是不允许直接访问保存在堆内存中的对象的,所以在访问一个对象时,首先得到的是这个对象在堆内存中的地址,然后再按照这个地址去获得这个对象中的值,这就是传说中的按引用访问。而原始类型的值则是可以直接访问到的。

    3、复制变量时的不同

    1)原始值:在将一个保存着原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的,他们只是拥有相同的value而已。

    2)引用值:在将一个保存着对象内存地址的变量复制给另一个变量时,会把这个内存地址赋值给新变量,也就是说这两个变量都指向了堆内存中的同一个对象,他们中任何一个作出的改变都会反映在另一个身上。(这里要理解的一点就是,复制对象时并不会在堆内存中新生成一个一模一样的对象,只是多了一个保存指向这个对象指针的变量罢了)。多了一个指针
    浅拷贝:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SoeUg10W-1596703084659)(images/screenshot_1595226833036.png)]

    深拷贝:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JxsVP0Bi-1596703084660)(images/screenshot_1595226846817.png)]

    4、参数传递的不同(把实参复制给形参的过程

    首先我们应该明确一点:ECMAScript中所有函数的参数都是按值来传递的。

    但是为什么涉及到原始类型与引用类型的值时仍然有区别呢?还不就是因为内存分配时的差别。

    1)原始值:只是把变量里的值传递给参数,之后参数和这个变量互不影响。

    2)引用值:对象变量它里面的值是这个对象在堆内存中的内存地址,这一点你要时刻铭记在心!

    因此它传递的值也就是这个内存地址,这也就是为什么函数内部对这个参数的修改会体现在外部的原因了,因为它们都指向同一个对象。

    4、检测类型

    • 法一:typeof

    最基本的判断方式,该操作符返回一个表示数据类型的字符串,numberstringbooleanobjectfunctionundefinedsymbol

    1. ‘undefined’ --未定义的变量或值

    2. ‘boolean’ --布尔类型的变量或值

    3. ‘string’ --字符串类型的变量或值

    4. ‘number’ --数字类型的变量或值

    5. ‘object’ --对象类型的变量或值,或者null(这个是js历史遗留问题,将null作为object类型处理)

    6. ‘function’ --函数类型的变量或值

         console.log(typeof a);    //'undefined'
    
        console.log(typeof(true));  //'boolean'
    
        console.log(typeof '123');  //'string'
    
        console.log(typeof 123);   //'number'
    
        console.log(typeof NaN);   //'number'
    
        console.log(typeof null);  //'object'    
    
        var obj = new String();
    
        console.log(typeof(obj));    //'object'
    
        var  fn = function(){};
    
        console.log(typeof(fn));  //'function'
    
        console.log(typeof(class c{}));  //'function'
    
    • 法二:instanceof

    运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性
    语法:object instanceof constructor
    (1)基础类型

    let num = 1
    num instanceof Number // false
    
    num = new Number(1)
    num instanceof Number // true
    

    这两个都是一样的数值,为什么不一样?
    因为instanceof 检测的是:检测目标的__proto__与构造函数prototype,相同返回true,不同返回false,对于stringboolean是一样的
    注意:

    new String(1) // String {"1"}
    String(1) // "1"
    

    (2) 继承关系的用法

    // 判断 foo 是否是 Foo 类的实例 , 并且是否是其父类型的实例
     function Aoo(){}
     function Foo(){}
     Foo.prototype = new Aoo();//JavaScript 原型继承
    
     var foo = new Foo();
     console.log(foo instanceof Foo)//true
     console.log(foo instanceof Aoo)//true
    

    (3) 复杂类型

    let arr = []
    arr instanceof Array // true
    arr instanceof Object // true
    Array.isArray(arr) // true
    

    注意:
    (new Number(1)) instanceof Object // true
    (4) 其他类型

    let reg = new RegExp(//)
    reg instanceof RegExp // true
    reg instanceof Object // true
    
    let date = new Date()
    date instanceof Date // true
    date instanceof Object // true
    

    但是Fuction不一样

    function A() {}
    let a = new A()
    a instanceof Function // false
    a instanceof Object // true
    A instanceof Function // true
    

    –>分析a为什么不是?

    • a是new出来,所以是经过构造,因此已经是对象,不再是函数,所以false。
    • a是经过构造的对象,返回ture没问题。
    • 如上所述,A是个函数,因此没什么概念上的问题。但是要知道A.__proto__Function.prototypeƒ () { [native code] },这是与object以后处于原型链上层的存在,而且与object平级:
    let obj = {}
    obj.__proto__ // {constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}
    obj.__proto__.prototype // undefined
    
    let A = function() {}
    A.__proto__ // ƒ () { [native code] }
    A.__proto__.prototype // undefined
    

    本章内容图谱:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qZLYd9tI-1596703084662)(images/screenshot_1595231058140.png)]

    展开全文
  • 第2章 基本数据类型数值表达式2.1 知识要点计算机的基本功能是进行数据处理。在C++语言中,数据处理的基本对象是常量和变量。运算是对各种形式的数据进行处理。数据在内存中存放的情况由数据类型所决定。数据的...

    2章 基本数据类型与数值表达式

    2.1 知识要点

    计算机的基本功能是进行数据处理。在C++语言中,数据处理的基本对象是常量和变量。运算是对各种形式的数据进行处理。数据在内存中存放的情况由数据类型所决定。数据的操作要通过运算符实现,而数据和运算符共同组成了表达式。本章是对C++语言中的数据类型、运算符、表达式等内容的全面介绍,要正确理解其特点,并灵活运用,主要掌握以下的知识要点:

    1.掌握常量和变量的概念。

    2.掌握整型数据和实型数据、字符型数据和字符串型数据的概念和区别。

    3.掌握各种类型的变量说明及其初始化。

    4.掌握算术运算、关系运算、逻辑运算、赋值运算、逗号运算、条件运算等概念。

    5.掌握运算符的优先级、左结合和右结合规则。

    6.掌握表达式求值时的自动转换和强制类型转换。

    7.掌握自加、自减运算的规则。

    8.掌握常用数学函数的功能。

    2.2 典型例题分析与解答

    1.  选择题

    例题1:运算符+=*>=中,优先级最高的运算符是(    )。

    A+         B=        C*       D>=

    答案:C

    分析:根据C++语言对运算符优先级的规则,以上运算符优先级从低到高的次序为=>=+*

     

    例题2:下列说法正确的是(    )。

    Acout<<”/n”是一个语句,它能在屏幕上显示”/n”

    B/68代表的是字符D

    C1E+5的写法正确,它表示余割整型常量。

    D0x10相当于020

    答案:D

    分析:分号是语句的已部分,且/n是转义字符;/68代表了八进制的68,而八进制中没有数字81E+5是实型常量;十六进制的10相当于十进制的16,相当于八进制的20

     

    例题3:下列不合法的变量名为(    )。

    Aint         Bint1       Cname_1         Dname0

    答案:A

     

    分析:根据变量名命名要求,变量名只能由大小写字母、数字、下划线组成,且系统关键字不能作为变量名。

     

    例题4:下面正确的为(    )。

    A4.1/2                     B3.2%3

    C3/2==1 结果为1           D7/2 结果为3.5

    答案:A

    分析:%运算符要求式整型;关系运算值为0;两个整数相除,商为为相除后的整数部分。

     

    例题5:已知a=4b=6c=8d=9,则“(a++b>a++&&c>d)?++da<b 值为(    )。

    A9           B6           C8          D0

    答案:D

    分析:此题是考察“++”运算符、逗号运算符、条件运算符及它们运算优先级的综合题,根据这些运算符的运算规则,得出表达式的运算结果。

     

    例题6:已知i=5j=0,下列各式中运算结果为j=6的表达式是(    )。

    Aj=i+++j       Bj=j+i++      Cj=++i+j      Dj=j+++i

    答案:C

    分析:自增++、自减运算符在变量的前面或后面,其运算结果是不同的。若++在变量前,则先将变量的值加1(或减1)后,再将变量的值参与运算;反之则先将变量的值参加运算,再将变量的值加1(或减1)。自增++、自减运算符优先级高于算术运算符。

     

    例题7:已知x=43ch=A’,y=0;则表达式(x>=y&&ch<’B’&&!y)的值是(    )。

    A0         B.语法错         C1         D.“假”

    分析:根据C++语言中运算符优先级的高低,“!”运算符最高,关系运算符高于逻辑运算符。则上面的表达式转换为:1&&1&&1,结果为1

    答案:C

     

    2.  填空题

    例题8:如果sint型变量,且s=6,则下面s%2+s+1%2表达式的值为____

    答案:1

    分析:%运算符是求余运算,得到的结果是相除后的余数。表达式转换为6%2+6+1%2=0+7%2=1

     

    例题9:如果定义int a=2b=3float x=5.5y=3.5;则表达式(float)(a+b/2+intx%inty的值为_____

    答案:4.5

    分析:不同类型的数据混合运算时,可以使用强制类型转换符,强制将一种数据类型转换为另一种数据类型后再进行运算。对表达式,先求表达式的值,再转换值的类型,本题的运算结果为4.5

     

    例题10:设所有变量均为整型,则表达式(e=2f=5e++f++e+f)的值为____

    答案:9

    分析:逗号运算符是是将两个或多个表达式组合成一个表达式的运算符。求解时从左至右依次计算每个表达式的值,整个表达式的值就是最右边的表达式的值。本题的答案为9

     

    例题11:已知字母aASCII码为十进制数97,且设ch为字符型变量,则表达式ch=’a’+’8’-‘4’的值为____

    答案:e

    分析:C++语言中,对字符数据进行算术运算,实际上就是对字符的ASCII码进行运算。以字符形式输出时,再将ASCII码转换为相应的字符输出。本题表达式为ch=97+8-4=101101相应的ASCII为字符e

     

    3.  编程题

    例题12:编写一个程序,从键盘输入半径和高,输出圆柱体的底面积和体积。

    解:程序如下:

    #include<iostrean.h>

    void main()

    {

      double r, h, area, volume;

      cout<<”请输入半径:”;

      cin>>r;

      cout<<”请输入高:”;

      cin>>h;

      area=3.14*r*r;

      volume=area*h;

      cout<<”底面积是: ”<<area<<endl;

      cout<<”体积是: ”<<volume<<endl;

    }

    2.3 教材习题分析与解答

    1.     C++语言中有哪些数据类型?分别说明它们的类型关键字、取值范围、类型长度。

    答:C++语言中的数据类型有:整型(短整型,整型,长整型);字符型;逻辑型;枚举型;实型(单精度,双精度,长双精度);引用型(指针,引用);复合型(结构,联合);空类型。

    2.     字符常量与字符串常量的区别是什么?

    答:字符常量与字符串常量的主要区别在于:(1)定界符不同。字符常量使用单引号,而字符串常量使用双引号。2长度不同。字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数。3存储要求不同。字符常量存储的是字符的ASCII码值,而字符串常量除了要存储有效的字符外,还要存储一个结束标志’/0’

     

    3.说明下面的每个数据各属于哪一种(数值常量、字符常量、字符串、标识符、保留字、运算符、标点、非法数据)?

          25       18        -3.67         12.8         4        4

          x1       x2       1949.10     cin                  K_name

          3ab      float  x ,y ;          if                  +

    /n      ?                     sy1.cpp    /32       /

    答:数值常量有:25,18,-3.67, 12.8

    字符常量有:4//32

    字符串有:4x21949.10sy1.cpp,  /n

    保留字:cin ,int,endl,if

    运算符:+

    标点:?

    非法数据:float  x ,y   ;  , 3ab

    变量:x1,K_name

     

    4.选择题

    1)下列数据类型不是C++语言基本数据类型的是( )。

    A.字符型      B.整型       C.实型     D.数组

    答案:D

     

    2)在C++语言中,080是( )。

    A.八进制数         B.十进制数    C.十六进制数       D.非法数

    答案:B

     

    3)下列字符列中,可作为C++语言程序自定义标识符是(   )。

     A.switch       B.file        C.break           D.do 

    答案:B

     

     (4)  运算符 +<==% 中,优先级最低的运算符是(   )。

    A. +          B.<=         C.=              D.%

    答案:C

     

     (5) 下列字符列中,可以作为“字符串常量”的是( )。

     A. ABC       B.xyz     C.′uvw′          D. ′a′

    答案:B

     

     (6)  设变量mnabcd均为0,执行(m = a==b)||(n=c==d)后,mn的值是(  )。

     A.00        B. 01        C. 10         D. 11

    答案:C

     

     (7)  字符串”vm/x43///np/102q”的长度是(   )。

    A. 8          B. 10         C. 17            D. 16     

    答案:A

     

    8 C++语言中,自定义的标识符(  )。

    A.能使用关键字并且不区分大小写   B.不能使用关键字并且不区分大小写

    C.能使用关键字并且区分大小写     D.不能使用关键字并且区分大小写

    答案:D

     

    9)设有代码“int a = 5;”,则执行了语句“a + = a - = a*a;”后,变量a的值是(   )。

    A.3             B. 0          C. -40         D. –12

    答案:C

     

    10)设a5,执行下列代码后,b的值不为2的是(   )。

    A. b = a/2                    B. b = 6-(--a)

    C. b = a%2                   D. b = a < 3 ? 3: 2

    答案:C

     

    11下面的( )均是C语言的整型常量。

    A.0xffff 611    B.01b 0xa1  C.986.012 0667      D.2e4 0x

    答案:A

    12)数学公式 写成C表达式,下面的(   )是正确的。

    A.sqrt (abs(pow(x, y) + exp(y)))     B.sqrt (abs(pow(y, x) + exp(y)))

    C.sqrt (fabs(pow(x, y) + exp(y)))     D.sqrt (fabs(pow(y, x) + exp(y)))

    答案:D

     

    5.x为int类型,y为double类型,指出下列各表达式值的类型。

    (1)1/3        int                (2) 48L           long

    (3) 5 % 3     int                (4) x*3/y         double

    (5) ‘x’+20    int                (6) (int )y          int

    (7) y != 10    bool               (8)  x<1 || x>10   bool

    (9) x>10 ? x : sqrt (x)  intfloat   (10) x && y       bool

    (11) true     bool                (12) (char) (x+10)  char

    (13) 1.0 /3   float                (14) sizeof (float)    int

    (15) x,y,x+y,  double

    说明:(9)题,如果x>10成立,表达式值的类型为int,如果x>10不成立,表达式值的类型为float。(15)题,为逗号表达式,x+y的值即为整个表达式的值,因而值的类型为doublebool型在C++int代替,true值为1false值为0

     

    6. 写出下列算术表达式的值:

    (1) x+a%3*(int)(x+y)%2/4   x=2.5,a=7,y=4.7        

    答:上述表达式=2.5+1*int7.2%2/4 = 2.5+1*7%2/4 = 2.5

     

    (2) (float)(a+b)/2+(int)x%(int)y   a=2,b=3,x=3.5,y=2.5

    答:上述表达式=float5/2+3%2 = 2.5+1 = 3.5

     

    7.设程序中有说明语句

    int a=20;     double x=4.7;    char r= ’a’;

    试求出下列每个表达式的值(假定各表达式互不影响)。~

                       答案                                  答案

          1a++            20                     (2) ++r                  98

    (3) 1+a/3%4          3                      (4) 10*sizeof( int )         40

    (5) char (a+20)        (                      (6)a= =r || a= =floor(x)      0

    (7) a/9.0             2.222222           (8)x=pow(3,5)            273.000000

    (9) x=(a++,r++)       97.000000         (10) ceil(x-0.5)           5.000000

    (11) a=abs(a)%8-10    -6                     (12)x=fabs(-27.2)+6       33.200000

    (13)floor(x+0.5)       5.000000          (14) ceil((x-=0.5)-0.5)      4.000000

    (15)floor(x*1000+0.5)/1000  4.700000  (16)floor(x+0.5)           5.000000

    (17)floor(x*1000)/1000     4.700000   (18)a+rand()%40        某一个随机整数

    (19) a % =n % = 2),n=5   5             

    此题运行时要给n赋初值, n必须是整型奇数,n为整型偶数出错。

    (20) a + = a - = a * = a       0

    说明:函数ceilx),返回大于等于x的最小整数;floorx),返回小于等于x的最大整数;rand(),返回0~32767之间的整数。

     

    8.设程序中有说明语句

    int x=20;     float y=4.7;    char ch = ’k’;

    试求出下列每个表达式的值(假定各表达式互不影响)

                     答案                                   答案

    (1) x==0              0               (2) x!=y                1

    (3) x++ >21           0               (4) a == A           0

    (5) ch != 0           1               (6) x>0 && y>0          1

    (7) x>0 && 1          1               (8) y>0 && 0            0

    (9) !(x||y)==!x&&!y   0               (10) x++ !=20 || y      1

    (11) !! ch==ch        0               (12) !(x&&y)==!x||!y    1

    说明:C++语言提供了三种逻辑运算符:!,&&,||,其中!逻辑非的优先级最高,&&逻辑与次之,||逻辑或最低。!逻辑非是右结合性,&&逻辑与和||逻辑或是左结合性。

    2.4 补充习题

    1.       选择题

    1C++语言中的标识符只能右字母、数字和下划线三种字符组成,且第一个字符(    )。

      A.必须为字母                    B.必须为下划线      

    C.必须为字母或下划线            D.可以是字母、数字和下划线中任一中字符

     

    2)下面正确的字符常量是(    )。

      A.“C          B.‘//’’       C.‘W        D.‘’

     

    3)如果说明语句:char c=/72’;则变量c    )。

      A.包含1个字符           B.包含2 个字符

    C.包含3个字符           D.说明不合法,c 的值不确定

     

    4)表达式18/4*sqrt4.0/8值的数据类型为(    )。

      Aint         Bfloat         Cdouble         D.不确定

     

    5)关于逻辑运算符的说法正确的是(    )。

      A.它们都是双目运算符,优先级相同

    B.语句“int a=0,c=1,b;b=a&&c++; 执行后,c 的值为2

    C.语句“int a=0,c=1,b;b=a||c++; 执行后,c 的值为2

    D.语句“int a=1,c=1,b;b=a&&c++; 执行后,c 的值为2

     

    6)设 int m=7n=12;则表达式为3的是(    )。

      An%=(m%=5)             Bn%=(m-m%5)

    Cn%=m-m%5             D(n%=m)-(m%=5)

     

    7)数学公式yx+lny,正确的C++语言的表达式是(    )。

      Asqrt(fabs(pow(y,x)+log(y)))     Bsqrt(fabs(pow(x,y)+log(y)))

    Csqrt(abs(pow(y,x)+log(y)))      Dsqrt(abs(pow(x,y)+log(y)))

     

    8)有如下程序段:

       int a=14,b=15,x;

       char c=’A’;

       x=(a&&b)&&(c<’B’);

      执行该程序后,x的值为(    )。

      Ature        Bflase        C0          D1

     

      9)下面四个选项中,均是不合法的标识符的是(    )。

      AB         Bfor          Ccin        Dif

    B_1          1a0              a_b          temp

    cout          _a10             int           b-a

     

    10)设变量a是整型,b是实型,c是双精度型,则表达式10+a+c*b值的数据类型为(   )。

      Aint         Bfloat         Cdouble         D.不确定

     

    11)以下叙述中不正确的是(    )。

    A.在C++程序中,nameNAME是两个不同的变量 

    B.在C++ 程序中,逗号运算符的优先级最低

    C.若变量mnint型,则m=n后,n中的值不变

    D.当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能诸如实型数值。

     

    12sizeoffloat)是(    )。

      A.一个双精度型表达式            B.一个整型表达式

    C.一种函数调用                  D.一个不合法的表达式

     

    13)下面不正确的字符串常量是(    )。

      A.‘rst       B.“1414       C.“0        D.“ 

     

    14)对代数式5ae/bc,下面不正确的C++语言表达式是(    )。

      Aa/b/c*e*5       B5*a*e/b/c       C5*a*e/b*c       Da*e/c/b*5

     

    15)下列运算符中优先级最高的是(    )。

      A.?:         B&&           C+            D!=

     

    16)设a是整型变量,则表达式(a=4*5a*2),a+6的值是(    )。

      A20           B26            C40           D46

     

    17)设有:int a=1b=2c=3d=4m=2n=2;执行(m=a>b&&n=c<d)后n的值为(    )。

      A1            B2             C3            D4

    18)用C++的语言表达式表示 |x3+log10x|的正确是(    )。

      Afabsx*3+logx))                 Babspowx3+logx))

    Cf abspowx3.0+logx))       Dabspowx3.0+logx))

     

    19)设int k=7x=12;则能使值为3的表达式是_____

      Ax%=k%=5               Bx%=k-k%5

    Cx%=k-k%5                   D.(x%=k-k%=5

     

    20)设有语句:int a=7float x=2.5y=4.7;则表达式x+a%3*int)(x+y%2/4的值是(    )。

      A2.500000        B2.750000        C3.500000        D0.000000

     

    21)设有语句int x=3y=4z=5;则下面表达式中值为0的是(    )。

      A’x’&&’y’                  Bx<=y

      Cx||y+z&&y-z               D.!((x<y&& !z | | 1

     

    22)表达式18/4*sqrt4.0/8值的数据类型为(    )。

      Aint           Bfloat          Cdouble          D.不确定

     

    23)判断char型变量n是否为小写字母的正确表达式为(    )。

      A’a’<= n <=’z’                   B.(n>=a&&n<=z

    C.(’a’>=n| |’z’<=n           D.(n>=’a’&&n<=’z’

     

    2.       填空题

    1 A”与‘A’的区别是:前者表示的是__________,占用______个内存空间,后者表示的是_________,占用_______个内存空间。

    2 表达式8/4*(int)2.5/(int)(1.25*(3.7+2.3))值的数据类型为_________

    3)已知cASCII码为十进制数99,设k为字符型变量,则表达式k=c+9-8’的值为________

    4)设有说明语句 int a=6;,则运算表达式a+=a-=a*a后,a的值为_______

    5C++表达式表达:y=ax2+bx+c_________________ 5x3+9xy/5-xy______________

    6)设abc都是int型变量,则运算表达式a=(b=4)+(c=2)后,a值为_____b值为______c值为______

      (7) C++语言中的标识符只能由三种字符组成,它们是______________________

    8)有语句:char k=/010’;则变量k中包含的字符个数是_____

    9)在C++语言中,表示逻辑“真”值用_____________

    10)表达式pow2.8sqrtdoublex)))值的数据类型为_________

    11)设m是一个三位数,从左到右用abc表示各位是数字,则从左到右各个数字是cba的三位数的表达式是_________________________

    12)设有语句int a=3b=4c=5;则表达式:!a+b+c-1&&b+c/2的值为______,表达式a | | b+c&& b = = c的值为______

    13 请写出判断整型变量x为偶数且不小于100的表达式:______________________

     

    3.       编程题

    1)用C++语言写出下列要求的表达式:

        判断char型变量ch是否为大写字母。

       yint变量,判断y是否为奇数。

       ƒ xyz都为int型变量,描述“xy中有一个小于z”。

       xyz都为int型变量,描述“xy z中有两个为负数”。

    2)编写一个程序,从键盘输入两个整型的数,在屏幕上分别输出这两个数的和、差和积。

    3)编写一个程序,从键盘输入两个数,分别求出这两个数的平方和和立方和,在屏幕上予以输出。

    4)编写程序,从键盘输入某一字母的ASCII码,如:97(字母a),98(字母b),65(字母A)等,在屏幕上输出给字母。

    展开全文
  • Python基本数据类型

    千次阅读 2015-09-12 08:12:40
    基本数据类型 数值型 整型Integral 浮点型Float 复数 布尔型Bool 变量的命名规则 组合数据类型 序列 字符串String 元组Tuple 列表List 最后前言Python作为一种弱类型编程语言,其数据类型较之于C/C++无论是在数据的...

    目录

    前言

    Python作为一种弱类型编程语言,其数据类型较之于C/C++无论是在数据的存储还是调用都有着很大的区别。其特有的字典类型更是一个非常经典且功能强大的数据类型。下面一起来学习Python的数据类型,期间也会穿插一些Python的实用技巧。

    软件环境

    • 系统
      • Ubuntukylin 14.04
    • 软件
      • Python 4.7.6
      • IPython 4.0.0

    Python数据结构树状图

    • 基本数据类型
      • 数值型
        – 整型
        – 浮点型
        – 复数
      • 布尔型
      • 字符型
    • 组合数据类型
      • 序列
        – 列表
        – 元组
        – 字符串
      • 字典
      • 集合
      • 文件
    • 自定义类型

    基本数据类型

    数值型

    整型Integral

    整型int是一种不可变类型

    In [9]: num = 1
    
    In [10]: num = 2
    
    In [11]: num
    Out[11]: 2

    需要注意的是,num = 1、 num = 2 并不是同一个数据对象。第一个num变量保存着 1 在内存中存储的索引地址,第二个变量num则表示 2 在内存中存储的索引地址。在上面的两次赋值中,1、2 两个数据对象在内存中并没有改变,改变的只是 num 变量所指向的内存地址。所以说int类型是一种不可变类型,int类型对象在内存中并不会发生改变,但可以改变int型对象所对应变量的值。其调用过程为:变量num只存储了索引地址,再通过索引找到在内存中存储的int型对象,并最终引用出来。

    浮点型Float

    In [51]: floatTest
    Out[51]: 3.141592
    
    In [52]: floatTest = 3.14159299999999999999999999999999999999999
    
    In [53]: floatTest
    Out[53]: 3.141593
    
    In [54]: type(float)
    float      floatTest  

    上面的例子可以看出Python中float类型的数据同样有着存储限制。

    复数

    Python还支持复数,为Math领域的研究提供了非常好的支持。

    In [48]: pulralTest = 3+6j
    
    In [49]: pulralTest
    Out[49]: (3+6j)

    布尔型Bool

    In [12]: bool = False
    
    In [13]: bool
    Out[13]: False 
    
    In [15]: bool = True
    
    In [16]: bool
    Out[16]: True

    布尔类型可以直接赋值,注意首字母要大写。

    变量的命名规则

    1. 大小写敏感,可以含有下划线_ 。
    2. 命名惯例:
      a. 尽量不要以’ _ ’ 为首字母
      b. ‘_X_’ 为系统变量,有特殊含义
      c. ‘__X’ 表示类的本地变量,在类中调用(注意:是两条下划线’__’)
      d. ‘__X__’ Python Module的内置方法
      e. ’ _ ’ 存储着当前最后一个表达式的结果
    In [42]: 2*3
    Out[42]: 6
    
    In [43]: print _
    6

    使用dir( )函数可以显示Python一般对象的内置方法,如下:

    In [58]: import platform
    
    In [59]: dir(platform)
    Out[59]: 
    ['DEV_NULL',
     '__builtins__',
     '__copyright__',
     '__doc__',
     '__file__',
     '__name__',
     '__package__',
     '__version__',
     '_abspath',
     '_architecture_split',
     '_bcd2str',
     '_codename_file_re',
     '_default_architecture',
     '_dist_try_harder',
     '_distributor_id_file_re',
     '_follow_symlinks',
     '_ironpython26_sys_version_parser',
     '_ironpython_sys_version_parser',
     '_java_getprop',
     '_libc_search',
     '_lsb_release_version',
     '_mac_ver_gestalt',
     '_mac_ver_lookup',
     '_mac_ver_xml',
     '_node',
     '_norm_version',
     '_parse_release_file',
     '_platform',
     '_platform_cache',
     '_popen',
     '_pypy_sys_version_parser',
     '_release_file_re',
     '_release_filename',
     '_release_version',
     '_supported_dists',
     '_sys_version',
     '_sys_version_cache',
     '_sys_version_parser',
     '_syscmd_file',
     '_syscmd_uname',
     '_syscmd_ver',
     '_uname_cache',
     '_ver_output',
     '_win32_getvalue',
     'architecture',
     'dist',
     'java_ver',
     'libc_ver',
     'linux_distribution',
     'mac_ver',
     'machine',
     'node',
     'os',
     'platform',
     'popen',
     'processor',
     'python_branch',
     'python_build',
     'python_compiler',
     'python_implementation',
     'python_revision',
     'python_version',
     'python_version_tuple',
     're',
     'release',
     'string',
     'sys',
     'system',
     'system_alias',
     'uname',
     'version',
     'win32_ver']
    
    In [60]: dir(type)
    Out[60]: 
    ['__abstractmethods__',
     '__base__',
     '__bases__',
     '__basicsize__',
     '__call__',
     '__class__',
     '__delattr__',
     '__dict__',
     '__dictoffset__',
     '__doc__',
     '__eq__',
     '__flags__',
     '__format__',
     '__ge__',
     '__getattribute__',
     '__gt__',
     '__hash__',
     '__init__',
     '__instancecheck__',
     '__itemsize__',
     '__le__',
     '__lt__',
     '__module__',
     '__mro__',
     '__name__',
     '__ne__',
     '__new__',
     '__reduce__',
     '__reduce_ex__',
     '__repr__',
     '__setattr__',
     '__sizeof__',
     '__str__',
     '__subclasscheck__',
     '__subclasses__',
     '__subclasshook__',
     '__weakrefoffset__',
     'mro']

    而Module或函数的__doc__方法可以显示Module或函数的Document,以此来认识一个Module或函数。而这些Document,写入在Python Module文件首部的三引号中”’ “’,同时”’ ”’作为批量输出的标识,用于同时输出多行内容或充当注释。

    In [64]: platform.__doc__
    Out[64]: ' This module tries to retrieve as much platform-identifying data as\n    possible. It makes this information available via function APIs.\n\n    If called from the command line, it prints the platform\n    information concatenated as single string to stdout. The output\n    format is useable as part of a filename.\n\n'
    
    In [65]: id.__doc__
    Out[65]: "id(object) -> integer\n\nReturn the identity of an object.  This is guaranteed to be unique among\nsimultaneously existing objects.  (Hint: it's the object's memory address.)"

    组合数据类型

    序列

    Python最基本的组合数据结构就是序列。序列,即由非负整数索引的对象的有序集合。有下列6种内建序列类型,其中又可以归为3类:
    1. 整数序列:xrange对象
    2. 字符序列:字符串、buffer(缓冲区)对象、Unicode字符串
    3. 对象序列:列表、元组
    其中列表、元组、字符串都是Python程序中非常常用的两种类型。

    字符串String

    字符串是一种序列,可以通过索引引用,以字符为单位,属于不可变类型。当定义一个str对象时,str对象会在内存中以ASCII码的格式从索引对象指定的入口地址依次以字符为单位存放起来,其中每一个Char都占用1Byte(8bit)的存储空间。
    :在Python中的字符串可以使用 ‘Str’ 或者 “Str” 括起来,而且两者没有任何的区别,只视乎于那一个使用起来更加方便和更适合使用环境。随便一提’” Document ‘”在Python中表示文档,用在代码行中,有类似注释的功能,而且’” ‘”中可以使用单引号和双引号。
    例子(1).

    In [19]: name = 'jmilk'
    
    In [20]: id(name)
    Out[20]: 140682798476624
    
    In [21]: name = 'chocolate'
    
    In [22]: id(name)
    Out[22]: 140682799006128
    
    In [23]: type(name)
    Out[23]: str

    例子(2).

    In [36]: name1 = 'jmilk'
    
    In [37]: name2 = 'jmilk'
    
    In [39]: id(name1) == id(name2)
    Out[39]: True

    id(variable):查询变量存储的索引地址
    type(variable):查看变量的数据类型
    例子(1)中,显然同一个name变量在赋与不同的字符串类型值后name变量自身的索引地址发生了改变。
    例子(2)中,将同一个str对象’jmilk‘赋值给两个不同的变量,这两个变量的值(内存中的引用对象)却是一样的。
    字符串的切片
    字符串最为序列的一种,可以使用切片操作符来实现字符串的切片显示。

    In [62]: sentence = 'my name is jmilk'
    
    In [63]: sentence
    Out[63]: 'my name is jmilk'

    (1)stringName[x:y] –>显示字符串中从第x个索引的字符–第y-1个字符,索引从0开始计算,其中的空格也算一个字符。

    In [64]: sentence[0:7]
    Out[64]: 'my name'

    (2)当x或y为空时,默认为显示往前、往后的所有

    In [66]: sentence[:7]
    Out[66]: 'my name'
    
    In [68]: sentence[7:]
    Out[68]: ' is jmilk'

    (3)string[x:y:步进],在上述的基础上加入步进显示

    In [70]: sentence[0:7]
    Out[70]: 'my name'
    
    In [71]: sentence[0:7:3]
    Out[71]: 'mne'
    
    In [72]: sentence[0:7:2]
    Out[72]: 'm ae'

    从例子(3)中可以看出,步进的作用即将切片后的字符串,从第一次字符开始,往后均已以步进指定的间隔取出字符。

    小结:当执行一条赋值语句时,生成了两个内存对象。分别如下:
    1). 数据对象:Python会将所有的数据对象存放到分配的存储中(一般存放在内存中特定的地址块)。
    2). 引用对象:既是变量,其在内存中存放指定的数据对象的索引地址,既数据对象和变量是分别存放的。程序运行时,通过引用对象(变量)来调用出数据对象的值。而且引用对象(变量)是动态类型,可以任意改变引用对象的索引值。
    值得注意的是,Python自身带有垃圾回收的机制,各种对象在不被引用的时候,便自动由垃圾回收器回收。如上述例子(1),在str对象’jmilk‘不被任何引用对象指向时,会被系统回收掉其资源。

    元组Tuple

    元组是不可变对象,使用tupleName = (parameters)创建。

    In [3]: number = ('one','two','three')
    
    In [4]: number
    Out[4]: ('one', 'two', 'three')
    
    In [5]: type(number)
    Out[5]: tuple
    
    In [6]: id(number)
    Out[6]: 139715119475680
    
    In [7]: number = ('one','two','four')
    
    In [8]: id(number)
    Out[8]: 139715119475360

    使用id( )方法,显然两个number引用对象的索引是不一致的。而且在定义tuple对象后,就可以使用tuple对像的一些内置方法:
    首先使用dir( )来获取tuple类型对象number的多有内置方法

    In [9]: dir(number)
    Out[9]: 
    ['__add__',
     '__class__',
     '__contains__',
     '__delattr__',
     '__doc__',
     '__eq__',
     '__format__',
     '__ge__',
     '__getattribute__',
     '__getitem__',
     '__getnewargs__',
     '__getslice__',
     '__gt__',
     '__hash__',
     '__init__',
     '__iter__',
     '__le__',
     '__len__',
     '__lt__',
     '__mul__',
     '__ne__',
     '__new__',
     '__reduce__',
     '__reduce_ex__',
     '__repr__',
     '__rmul__',
     '__setattr__',
     '__sizeof__',
     '__str__',
     '__subclasshook__',
     'count',
     'index']

    或者也可以使用内置函数help(Object)来获取一个对象详细的帮助文档

    In [25]: help(number)

    会得到所有对象内置函数的使用格式和方法,如下:

    Help on tuple object:
    
    class tuple(object)
     |  tuple() -> empty tuple
     |  tuple(iterable) -> tuple initialized from iterable's items
     |  
     |  If the argument is a tuple, the return value is the same object.
     |  
     |  Methods defined here:
     |  
     |  __add__(...)
     |      x.__add__(y) <==> x+y
     |  
     |  __contains__(...)
     |      x.__contains__(y) <==> y in x
     |  
     |  __eq__(...)
     |      x.__eq__(y) <==> x==y
     |  
     |  __ge__(...)
     |      x.__ge__(y) <==> x>=y
     |  
     |  __getattribute__(...)

    例如可以使用__add__方法来连接两个tuple对象

    In [32]: name = ('jmilk','chocolate')
    
    In [33]: number.__add__(name)
    Out[33]: ('one', 'two', 'four', 'jmilk', 'chocolate')

    使用__eq__来判断两个tuple对象是否一致

    In [42]: name.__eq__(number)
    Out[42]: False

    使用__contains__来判断tuple对象是否包含一个元素

    In [44]: number.__contains__('one')
    Out[44]: True

    总而言之,善于使用help( )、doc()、__doc__等方法可以很好的帮助我们更加充分的认识Python这门语言,也可以非常的便于我们程序的编写。

    列表List

    列表是可变对象,使用ListName = [Parameters]创建。是任意对象的有序集合,通过索引访问其中的元素,可以任意的嵌套、伸长、异构(不同的数据类型,同时存放在一个List中,支持原处修改内部元素的引用。如果说元组类似于一元数组,那列表就相当于二元数组的效果。

    In [41]: testListOne = [1,2,3]
    
    In [42]: id(testListOne)
    Out[42]: 139682261309632
    
    In [45]: testListTwo = testListOne
    
    In [43]: testListOne.append(4)
    
    In [47]: testListOne
    Out[47]: [1, 2, 3, 4]
    
    In [48]: id(testListOne),id(testListTwo)
    Out[48]: (139682261309632, 139682261309632)

    从上面的例子可以看出,即便在testListOne对象中插入元素’4’后,testListOne与testListTwo的地址仍然是一致的,即在改变testListOne对象的值后,没有创建出一个新的内存对象,这是有别于不可变对象的。
    值得注意的是,只有使用了List类型对象内置的append、extend、remove、insert等方法的时候才会在原有的内存对象的基础上作出修改。不可以直接使用下述的方法来直接修改一个List对象的value。

    In [53]: testListOne = [1,2,3,4,5,6]
    
    In [54]: id(testListOne),id(testListTwo)
    Out[54]: (139682261332696, 139682261309632)

    直接修改List对象的Value,会产生一个新的内存对象。
    :List类型的对象本质是在列表变量的引用对象指向的地址空间中存放了列表中的元素的存储索引地址。而这种可以包含其他对象的引用的对象也称为容器。所以List类型虽然是可变的,但是List的元素本身不一定是可变的。因为List作为一个组合数据类型对象其可以实现对象的嵌套,List中的元素可以是string、tuple等不可变的类型,也可以是dic、list等可变类型的嵌套。

    小结:
    1. 不可变对象:int、float、string、tuple 对一个不可变类型的变量赋以新的值,会改变变量引用对象的索引值,使引用对象新的索引指向新的内存对象。原有的内存对象不会发生改变,但若不再被引用对象引用时,会自动的被垃圾回收机制回收。
    2. 可变对象:list、distionary 对一个可变类型的变量赋以新的值,会直接在变量引用对象指向的内存空间中存放新的value,而不会重新开辟新的空间存放新的值。

    字典dictionary

    字典是Python特有的一种数据结构,其不是以下标的索引来查询数据,而是使用Key:Value的键值对来实现变量和数据的映射,所以字典也被称之为映射数据类型。字典使用dictName = {key1:vlalue1,key2:value2,…}创建。字典数据类型,使得Python程序具有了更好的灵活性,因为其键值对的设计,很好的兼用了JOSN、NoSQL等主流数据处理技术。
    创建一个字典:

    In [2]: dictName = {'fan':'jmilk','zhang':'san','li':'si'}
    
    In [3]: dictName
    Out[3]: {'fan': 'jmilk', 'li': 'si', 'zhang': 'san'}

    显示字典中的元素:

    In [17]: dictName['fan']
    Out[17]: 'jmilk'
    
    In [19]: dictName['fan'],dictName['zhang'],dictName['li']
    Out[19]: ('jmilk', 'san', 'si')

    分别显示字典中的keys或values

    In [30]: dictName.keys()
    Out[30]: ['li', 'fan', 'zhang']
    
    In [31]: dictName.values()
    Out[31]: ['si', 'jmilk', 'san']

    在字典中加入key:value

    In [33]: dictName['wang'] = 'wu'
    
    In [36]: dictName
    Out[36]: {'fan': 'jmilk', 'li': 'si', 'wang': 'wu', 'zhang': 'san'}

    将字典中的一对key:value弹出(删除)

    In [50]: dictName.pop('fan')
    Out[50]: 'jmilk'
    
    In [51]: dictName
    Out[51]: {'li': 'si', 'wang': 'wu', 'zhang': 'san'}

    当然,字典类型的对象还有许多使用的内置方法,建议使用help(dictName)取详细的了解一个字典类型的对象所能实现的功能。

    最后

    掌握Python数据结构是编写Python程序的基本要求,当然Pyehon的数据结构的内容远比上述的要丰富许多。在以后的博文中我们更加详细
    深入的去学习每一个数据类型的具体实现和功能。
    Jmilk

    展开全文
  • Kotlin 基本数据类型

    千次阅读 2020-08-10 16:46:09
    Kotlin 基本数据类型基本数据类型字面常量 ...不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型。 类型 位宽度 Double 64 Float 32 Long 64 Int 32 short 16 byte 8 字面常量 ...
  • JavaScript数据类型 - Number类型

    千次阅读 2020-08-31 15:41:33
    Number类型应该是ECMAScript中最令人关注的数据类型了,这种类型使用IEEE754格式来表示整数和浮点数值。为支持各种数值类型,ECMA262定义了不同的数值字面量表示格式。 我们平时用的最多的也是最基本的数值字面量...
  • JavaScript数据类型

    千次阅读 热门讨论 2016-04-19 19:22:59
    前言:  ECMAScipt中的变量又是松散类型的,所谓松散类型就是可以用来保存...今天这篇文章就和大家一起来学习javascript中的类型,虽然很简单,但是我感觉数据类型是学习某种语言的前提,所以必须掌握它。  下面来
  • js数据类型操作

    千次阅读 2013-06-18 17:55:57
    JavaScript之数据类型 数据类型  JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和String。还有1种复杂数据类型——Object,Object本质上是由一组无序的名值对组成的。...
  • JavaScript中的数据类型

    千次阅读 2017-07-15 09:16:53
    5中基本数据类型:Undefined、Null、Boolean、Number、String。 1种复杂数据类型:Object js中的Object不同与java中的类,其本质是一组无序的键值对。具体类型判定使用typeof操作符,根据返回值判断数据类型
  • JS数据类型

    千次阅读 2018-01-03 23:53:18
    ECMAScript有5种基本数据类型: ...ECMAScript支持任何创建自定义类型的机制,而所有值最终都将是上述6种数据类型之一。 typeof 对一个值使用typeof操作符可能返回下列的某个字符串: undefined——
  • 数据库数据类型学习总结

    千次阅读 2016-08-04 17:22:28
    SQLite 数据类型总结 http://www.cnblogs.com/bpasser/archive/2011/11/02/2233455.html 1。严格地说,SQLite 没有数据类型。SQLite 使用动态数据类型,即:数据的 类型取决于数据本身,而不是它的容器(字段) 2...
  • Verilog 数据类型
  • JS中六种数据类型(四)——Number

    万次阅读 2016-04-21 22:16:53
    Number类型应该是ECMAScript中最令人关注的数据类型了,这种类型使用IEEE754格式来表示整数和浮点数值(浮点数值在某些语言中也被称为双精度数值)。为支持各种数值类型,ECMA-262定义了不同的数值字面量。  最基本...
  • XPath的数据类型和节点类型

    千次阅读 2020-02-17 12:10:03
    一、XPath数据类型 XPath可分为四种数据类型:  1、节点集(node-set):节点集是通过路径匹配返回的符合条件的一组节点的集合。其它类型的数据能转换为节点集。 2、布尔值(boolean):由函数或布尔表达式返回的...
  • SQL Server2005 中的数据类型总结

    千次阅读 2009-08-15 11:15:00
    SQL Server2005 中的数据类型总结 SQL Server 2005 中的数据类型归纳为下列类别:精确数字 bigint decimal int numeric smallint money tinyint smallmon
  • 图2-1 数值类型 图2-2 数值型文字量1. 在Java程序中,下面哪个是不合法的标志符() 2D True ...2. 以下哪些变量的声明是合法的: ...3. 下列()不属于Java的基本数据类型 int String double Boolean ...
  • VBscript 的数据类型

    千次阅读 2008-08-26 22:06:00
    1.vbscript 的数据类型variant ,是...variant 数据类型还可以进一步区分数值信息的特定含义,用户可以将需要的数据放进variant中,而variant也会按照最适用于其包含的数据的方式进行操作。 下面列出了variant包
  • js中判断数据类型的方法

    千次阅读 2020-11-05 21:59:37
    JS中判断数据类型的方法: 使用typeof操作符。 对一个值使用 typeof 操作符可能返回下列某个字符串,返回的类型都是字符串形式。 (1) undefined:如果这个值未定义 (2) boolean:如果这个值是布尔值 (3) string:...
  • 运算符 数据类型转换
  • pgsql 第八节 数据类型

    千次阅读 2016-12-21 18:40:59
    数据类型 Table of Contents8.1. 数值类型 8.1.1. 整数类型8.1.2. 任意精度数值8.1.3. 浮点数类型8.1.4. Serial(序号)类型 8.2. 货币类型8.3. 字符类型8.4. 二进制数据类型8.5. 日期/时间类型 8.5.1. ...
  • Java有 5种引用类型(对象类型):类 接口 数组 枚举 标注 引用类型:底层结构和基本类型差别较大 JVM的内存空间: (1). Heap 堆空间:分配对象 new Student() (2). Stack 栈空间:临时变量 Student stu (3)...
  • java中有8个基本数据类型,它们都对应有封装类(包装类),其中基本数据类型char的包装类有些特殊,是Character类。  Java是一种强类型语言,这就意味着必须为每一个变量声明一种类型。在Ja
  • 如何判断js中的数据类型

    千次阅读 2018-08-28 10:57:59
     对一个值使用 typeof 操作符可能返回下列某个字符串,返回的类型都是字符串形式。  (1) undefined:如果这个值未定义  (2) boolean:如果这个值是布尔值  (3) string:如果这个值是字符串  (4) number:...
  • SQL Server 2005 常用数据类型详解

    千次阅读 2013-10-28 14:16:36
    1. 字符串数据类型 char 此数据类型可存储1~8000个定长字符串,字符串长度在创建时指定;如未指定,默认为char(1)。每个字符占用1byte存储空间。 nchar 此数据类型可存储1~4000个定长Unicode字符串,字符串长度在...
  • 由于也是初学python,所以在这里简要介绍一下python基础的数据类型,好在宏观上有个把握。 整数类型 python里面的整数类型可正可负,像其他的语言,python的整数并没有取值范围的限制。如:pow(x,y)函数用来...
  • Java数据类型精解

    千次阅读 2011-06-08 07:56:00
    这几天对Java数据类型做了一下总结,参考了一些资料,具体内容如下,如有错误请指正。 本文pdf版下载链接:http://download.csdn.net/source/3346971 Java数据类型剖析 1 Java数据类型Java变量包括如下两大类...
  • Verilog数据类型

    万次阅读 2014-10-01 20:23:26
    Verilog HDL中的参数(parameter)既不属于变量类型不属于网络类型范畴。参数不是变量,而是常量。用参数声明一个可变常量,常用于定义延时及宽度等参数。参数定义的格式: parameter par_name1=expression1,...
  • 内核的数据类型

    千次阅读 2013-01-31 19:56:35
    在讨论更高级的话题前,我们需要讨论一下可移植问题。现代版本的Linux内核的可移植性是非常好的,可以运行在许多不同的体系架构上。...坚持使用严格的数据类型,并且使用-Wall -Wstrict-prototypes选项编译可以防止
  • 【多选题】下列表达式的值为False的是( )【单选题】关于 Python 语句 P = –P,以下选项中描述正确的是________【判断题】已知 x, y = 3, 5,那么执行x, y = y, x 之后,x的值为15。【单选题】22 % 3 表达式输出结果为_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,906
精华内容 11,562
关键字:

下列不属于数值数据类型的是