作用域

Python3.7官方向导翻译之Python类

匿名 (未验证) 提交于 2019-12-02 22:54:36
类提供了将数据和功能捆绑在一起的手段。 创建一个新类创建一个新类型的对象,允许创建该类型的新实例。 每个类实例都可以附加属性以保持其状态。 类实例也可以有方法(由其类定义)来修改其状态。 与其他编程语言相比,Python的类机制为类添加了最少量的新语法和语义。 它是C ++和Modula-3中的类机制的混合体。 Python类提供了面向对象编程的所有标准功能:类继承机制允许多个基类,派生类可以重写其基类或类的任何方法,并且方法可以调用具有相同名称的基类的方法。 对象可以包含任意数量和种类的数据。 与模块一样,类也具有Python的动态特性:它们是在运行时创建的,并且可以在创建后进一步修改。 **在C++术语中,通常类成员(包括数据成员)是公有的(例外见下面的Privat Variables),并且所有的成员函数都是虚的(virtual)。和Modula-3中一样, 没有快捷的办法从对象的方法中来引用对象的成员:方法的第一个显示函数代表了对象本身,对对象本身的调用是隐式的。和Smaltalk中一样,类本身也是对象。 这为导入和重命名提供了语义。不像C++和Modula-3,内置类型可以作为基类来扩展。同样,和C++中的一样,大部分内置操作符有特殊的语法(算术操作符, 下标等),它们可以在类实例中重定义。** (由于缺乏普遍接受的术语来讨论类,我偶尔会使用Smalltalk和C +

函数参数、作用域、高阶函数、递归函数、高阶函数

匿名 (未验证) 提交于 2019-12-02 22:51:30
#-----必须参数、关键字参数、默认参数----- 1 def user_info(name,age,sex="male"): 2 print("Nmae: %s"% name) 3 print("Age: %d" % age) 4 print("Sex:%s" % sex) 5 6 #必须参数('dream',18) 7 user_info('dream',18) #Nmae: dream Age: 18 Sex:male 8 #关键字参数(age=10,name='rise') 9 user_info(age=10,name='rise') #Nmae: rise Age: 10 Sex:male 10 #默认参数(sex="male") 11 user_info("xiaohong",12,"madam") #Nmae: xiaohong Age: 12 Sex:madam #-----sum() 方法对系列进行求和计算----- 语法 sum(iterable[, start])参数 1、iterable -- 可迭代对象,如:列表、元组、集合。 2、start -- 指定相加的参数,如果没有设置这个值,默认为0。 #-----不定长参数使用(*args,**kwargs)----- #-----加法器 1 def add(*args): 2 print(args

Python3函数

匿名 (未验证) 提交于 2019-12-02 22:51:30
函数是组织好的,可重复使用的,用来实现单一,或相关功能的代码段。 函数能提高应用的模块性,和代码的重复使用率。 定义一个函数 可以定义一个由自己想要功能的函数,以下是简单规则: 语法: Python定义函数使用def关键字,一般格式如下: def 函数名(参数列表) 函数体 默认情况下,参数值和参数名称是按函数声明中的定义顺序匹配的。 参数传递 在python中,类型属于对象,对象是没有类型的。 a = [1,2,3] a = “Runoob” 以上代码中,[1,2,3]是List类型,“Runoob”是String类型,而变量a是没有类型的,她仅仅是一个对象的引用(一个指针),可以是指向List类型的对象,也可以是指向String类型对象。 可更改和不可更改对象 在Python中,string,tuples和numbers是不可更改的对象,而list,dict等则是可以修改的对象。 不可变类型: 变量赋值后a=5后再赋值a=10,这里实际是生成一个int对象10,再让a指向它,而5被抛弃,而不是改变了a的值,相当于重新生成了a。 可变类型: 变量赋值la = [1,2,3,4]后再赋值la[2] = 5则是将list la的第三个元素更改,本身la没有动,只是其内部的一部分值被修改了。 python 函数的参数传递: 不可变类型:类似于C++的值传递,如整数,字符串,元组。

Python中变量的作用域?(变量查找顺序)

匿名 (未验证) 提交于 2019-12-02 22:51:30
函数作用域的LEGB顺序 1.什么是LEGB? L: local 函数内部作用域 E: enclosing 函数内部与内嵌函数之间 G: global 全局作用域 B: build-in 内置作用 python在函数里面的查找分为4种,称之为LEGB,也正是按照这是顺序来查找的 文章来源: https://blog.csdn.net/weixin_38819889/article/details/92106695

python中的作用域

匿名 (未验证) 提交于 2019-12-02 22:51:30
python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量; E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的; G:globa,全局变量,就是模块级别定义的变量; B:built-in,系统固定模块里面的变量,比如int, bytearray等。 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。 x = int(2.9) # int built-in g_count = 0 # global def outer(): o_count = 1 # enclosing def inner(): i_count = 2 # local print(o_count) # print(i_count) 找不到 inner() outer() # print(o_count) #找不到    当然,local和enclosing是相对的,enclosing变量相对上层来说也是local。 在Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if、try、for等)是不会引入新的作用域的,如下代码: if 2>1: x = 1 print(x) # 1    这个是没有问题的

变量的存储和作用域

北城以北 提交于 2019-12-02 22:44:01
初始化和赋值的区别是什么? 初始化:声明变量的时候同时赋值,声明的时候会划出新的内存区域,同时 赋值: 变量的储存方式:静态储存和动态储存. 静态存储:变量定义的时候,分配了一定的内存单元,在整个程序中,内存单元都不变.只能初始化一次,可以多次赋值,静态存储变量不初始化则初始为0. 动态存储:程序执行过程中才分配内存单元,使用完后就释放,如形参.函数的形式参数就是动态存储方式,声明函数的时候不给它分配内存单元.调用的时候传入实参,就分配内存单元,然后函数执行完后,就释放内存.动态存储变量若不初始化,则初始值为一个随机数. 怎么声明变量的存储方式? 全局变量包括全局变量和静态全局变量,都是静态存储,因此未初始值未0,静态局部变量是静态存储,只有动态局部变量是动态存储. 加上static前缀就是静态存储变量,如 static int a = 0; 不加static前缀默认就是动态存储变量,如 int b = 1; (如果是全局变量则于是静态存储.) 内存存储空间的分配: 动态存储区域:即存储用动态存储方式的变量的内存区域,如函数形参,没有加static前缀的局部变量(即动态局部变量),函数返回地址 静态存储区域:即存储用静态存储方式的变量的内存区域,如全局变量,静态全局变量.(没有动态全局变量) 程序区:存放程序语句. 变量的作用域:局部和全局. 全局变量:在所有函数外定义(包含主函数

Ubuntu安装使用Java开发环境

主宰稳场 提交于 2019-12-02 22:31:51
一:安装 sudo apt-get install sun-java6-jdk 注意:在安装过程中遇到一个画面显示 正在设定 sun-java6-jre 这时按TAB键选中确定,按回车即可。 待安装完毕后,选择默认Java即可。 sudo update-alternatives—config java 安装过程中会提示选择,输入“2”即可,然后按回车键确定。 如果一切顺利,便可开始配置环境变量,在终端中输入: sudo gedit /etc/environment 在其中添加如下两行: CLASSPATH=.:/usr/lib/jvm/java-6-sun/lib JAVA_HOME=/usr/lib/jvm/java-6-sun 保存退出后,运行如下命令: sudo gedit /etc/jvm 将文件中的 “/usr/lib/jvm/java-6-sun” 这行填入到配置块的顶部。 之后安装配置Eclipse,在终端中运行如下安装命令: sudo apt-get install eclipse 到此为止,Eclipse已经安装到Ubuntu系统。 二:使用 选择Ubuntu主菜单“应用程序”->“编程”->”Eclipse”启动后会首先询问工作文件夹,会出现对话框。 然后出现欢迎界面 说明:虽然新安装的Java已经成为系统默认的JVM,但Eclipse并不会使用刚才update

Python函数初识二

匿名 (未验证) 提交于 2019-12-02 22:11:45
在Python中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。 在Python程序中创建、改变、查找变量名时,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域。python的作用域是静态的,在源代码中变量名被赋值的位置决定了该变量能被访问的范围。即Python变量的作用域由变量所在源代码中的位置决定。 在Python中并不是所有的语句块中都会产生作用域。 只有当变量在Module(模块)、Class(类)、def(函数)中定义的时候,才会有作用域的概念。 举个栗子: def greet_people(): name = 'jack' print("Hello, "+name) # 在函数内打印变量 print(name) # 在函数外打印变量 ===》 直接出错 greet_people() 上述代码的运行结果为: C:\Python37\python3.exe D:/pythoncode/Exercise/Exer8/Exer8-13.py Traceback (most recent call last): File "D:/pythoncode/Exercise/Exer8/Exer8-13.py", line 5, in <module> print(name

函数补充:动态参数,函数嵌套,global与nonlocal关键

匿名 (未验证) 提交于 2019-12-02 22:11:45
一丶动态参数    1.*args 位置参数,动态传参 def func(*food): print(food) print(func("米饭","馒头","福建人","犹太人"))   将所有的位置参数都赋给*food    2.**kwargs 关键字参数,动态传参 # 关键字的动态传参 def eat(**food): print(food) print(eat(广东人= "福建人",goodeat = "饼干",我的天="飞天"))   将关键字参数,以字典的形式赋给**food    3.默认参数与动态参数的关系      如果以位置参数,关键字参数,默认参数排列会报错,我们改一下默认参数的位置,发现只有在位置参数后面,关键字参数前面,默认参数才不会报错 def func(*name,gender="男",**hobby): print(name,hobby,gender) print(func("周杰伦","谢霆锋","吴京",hobby1="看电影",hobby2="唱歌"))    总结一下顺序:       位置参数>*args>默认值参数>**kwargs   如果想接收所有参数,可以用*arge 和 **kwargs组合 def trans_para(*args,**kwargs): print(args) print(kwargs) trans_para(

Laravel笔记--Eloquent 模型

匿名 (未验证) 提交于 2019-12-02 22:11:45
Eloquent 模型 默认继承 use Illuminate \Database \Eloquent \Model类。 数据表名称与模型名称约定: 数据库的表名一般使用“蛇形命名法”命名。蛇形命名法要求单词小写,单词之间用_下划线连接。 与之对应的模型名称,则使用“帕斯卡法“命名,即单词头一字母都大写。 如果不是按以上约定,则需指明对应的数据表: class Flight extends Model { /** * 与模型关联的数据表 * * @var string */ protected $table = 'myflights'; } 主键: 模型默认数据表用id字段作主键,并且是递增整数类型。这些可以自定义: class Flight extends Model { /** * 与模型关联的数据表 */ protected $table = 'my_flights'; protected $primaryKey='mid'; //自定义主键字段 protected $keyType = 'string'; //自定义主键类型为字串 public $incrementing = false; //主键非自增型 } 时间截: 模型默认存在created_at 和 updated_at两字段,可设定$timestamps不需两字段: class Flight extends