zoukankan      html  css  js  c++  java
  • python基础补充

    关于模块导入方式:

      import  random

      print random.choice(range(10))

      from  random import choice

      print choice(range(10))

    第一种方法:将模块的名字设置为一个隐含在名字空间里的全局变量,这样就好像访问全局属性那样访问choice函数;

    第二种方法:直接把choice引入到全局名字空间里来(而非模块的名字),因此不再需要把这个属性当初模块的成员,实际上我们也只是拥有这个属性而已;

    python中存在的误解:以为第二种方法只导入了个函数,而没有导入整个模块,这个不对的;整个模块已经被导入了,但是只有那个函数的引用被保存下来,所有;from-import

    这种语法并不能带来性能上的差异,也没有节省内存一说;

    能不能重复导入模块:

      很多人担忧的一个问题是有两个模块m.py 和n.py都导入了foo.py模块,当m导入n时,foo岂不是被导入了两次?简单的说,当python碰到一个已经加载的模块又被导入时,

    它会跳过加载的过程,所以无需担心额外消耗内存的问题;

    python是“传引用的“ 还是”传值的“:

      这个问题不能简单的使用是或者不是来回答,只能说看情况而定-----有的对象在传入函数时是传引用,而有些则是被复制进来,即传值;判断的依据就是看对象的可改变性(mutability),而这一点取决于对象的类型;python程序员通常不用“传值”还是“传引用“这种说法,取而代之的是对象是可变的(mutable)还是不可变的(immutable)。

       简单的类型或者“标量”类型,包括整数或其他数字类型,str 和 unicode这样的字符串类型,以及元组都是不可变的;

       列表、字典、类、类实例等都是可变的;

    实例:

     1 >>> mylist = [1, 'a' , ['223', 'bar']
     2 ... ]
     3 >>> mylist2 = list(mylist)
     4 >>> mylist2[0] = 2
     5 >>> mylist2[2][0] = 'zzz'    #修改列表的第一个元素
     6 >>> print mylist
     7 [1, 'a', ['zzz', 'bar']]
     8 >>> print mylist2
     9 [2, 'a', ['zzz', 'bar']]
    10 >>> 

    总结:不可变对象(整数等)真正的被复制, 可变对象只是复制了一个对它们的引用,即在内存中只有一份对象,而有两份引用;

    这就涉及到一个 ”深拷贝“ 的问题

  • 相关阅读:
    CGFloat,CGPoint,CGSize,CGRect
    对discuz的代码分析学习(三)mysql驱动
    对discuz的代码分析学习(二)首页文件
    对discuz的代码分析学习(一)目录结构
    获取HTML DOM
    html中如何使用特殊字体
    如何让元素自动居中
    前端分页
    页面缩放scale
    控制台获取当前年的月份列表
  • 原文地址:https://www.cnblogs.com/chris-cp/p/4684497.html
Copyright © 2011-2022 走看看