main函数

python中main函数的用法

落爺英雄遲暮 提交于 2020-03-27 20:58:04
什么场景下会有main函数? 当该python脚本被作为模块(module)引入(import)时,其中的main()函数将不会被执行。 main函数的作用? __ name__ == '__ main__'是Python的main函数入口。并非说,加入这句才能使用python xxx.py来执行,而是说,这里可以判断,当前是否是直接被python直接调用执行。 main为什么只有文件当作执行程序的时候才会被执行呢? 这是由于两方面原因,一方面,main函数是所有执行程序的入口;另一方面,python的解释器是顺序执行脚本的并且不会调用任何不属于程序本身的代码和函数,需要补充说明的一点是,如果是被作为一个模块或库import到程序中,则会直接成为代码的一部分。 参考代码: 文件:main_function.py import datetime print('Hello World!') print('Time is ', datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S %A')) def main(): print('this message is from main function') if __name__ == '__main__': main() 执行结果: ➜ main git:(master) ✗ py main

Java中的值传递和引用传递

血红的双手。 提交于 2020-03-27 08:56:14
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。 Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言)。 如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的值不会改变原始的值.。 如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的值,那么在函数内的改变会影响到传入的参数。如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的 地址,所以不会改变参数的值。 例子: package com.demo.test; public class Employee { private String name; private double salary; public Employee(String

go-并发

落爺英雄遲暮 提交于 2020-03-26 18:12:05
并发编程 并发与并行 并发:同一时间段内执行多个任务(交替执行)。 并行:同一时刻执行多个任务(一起执行)。 Go语言的并发通过 goroutine 实现。 goroutine 类似于线程,属于用户态的线程,我们可以根据需要创建成千上万个 goroutine 并发工作。 goroutine 是由Go语言的运行时(runtine)调度完成,而线程是由操作系统调度完成的。 Go语言还提供 channel 在多个 goroutine 间进行通信。 goroutine 和 channel 是 Go 语言秉承的 CSP(Communicating Sequential Process)并发模式的重要实现基础。 goroutine Go语言中的 goroutine 的概念类似于线程,但 goroutine 是由Go的运行时(runtime)调度和管理的。Go程序会智能地将 goroutine 中的任务合理地分配给每个CPU。Go语言之所以被称为现代化的编程语言,就是因为它在语言层面已经内置了调度和上下文切换的机制。 在Go语言编程中你不需要去自己写进程、线程、协程,你的技能包里只有一个技能– goroutine ,当你需要让某个任务并发执行的时候,你只需要把这个任务包装成一个函数,开启一个 goroutine 去执行这个函数就可以了。 Go语言中使用 goroutine 非常简单

delphi中子窗体通用打开函数

烈酒焚心 提交于 2020-03-26 07:03:37
没有用MDI类型,是用setparent来设置子窗体的,在主窗体上放置一个panel2做为子窗体的父容器。Main为主窗体。子窗体中最好在关闭和ondestory中写上代码,在Onclose中写action:=cafree ,在ondestory中写上childfrm=nil; 如下代码: procedure CreateChildFrm(AForm:TCustomForm;const AFormClass:TFormClass); function isExist():boolean; var i:integer; begin result:=False; for i :=0 to Screen.FormCount-1 do begin if Screen.Forms[i].ClassType=AFormClass then begin Result:=True; AForm:=TForm(Screen.Forms[i]); Break; end; end; end; begin if not isExist() then begin AForm:=AFormClass.Create(Main); Winapi.Windows.SetParent(AForm.Handle,Main.Panel2.Handle); end else begin ShowWindow(AForm

C# 全局异常捕获(转载)

独自空忆成欢 提交于 2020-03-24 12:39:59
C# 全局异常捕获 原文地址: https://www.cnblogs.com/tomahawk/articles/5993874.html 开发界有那么一个笑话,说是“「我爱你」三个字,讲出来只要三秒钟,解释要三小时,证明却要一辈子。「Bug」三个字母,发现需要三秒,找到需要三小时,Debug却要一辈子。”。就算是资深的程序员也会写出Bug,但Bug并不可怕,重要的是在Bug发生的时候迅速定位Bug。 在Visual Studio中调试的时候,我们可以借助VS的调试工具进行调试,一旦出现未处理的异常时,VS也会在第一时间捕获并显示出来。随着开发的进行,终于程序要打包上线了。那么在上线之出了BUG我们该如何处理呢? 相信如果各位年龄够大,应该都见识过QQ出错崩溃吧?在零几年的时候QQ崩溃还不是一件稀罕事儿。每当QQ崩溃的时候都会弹出一个BUGReporter程序,会希望我们将出错的报告发送给腾讯 其实我们标题所说的全局异常捕获主要目标并不是为了将异常处理掉防止程序崩溃。因为当错误被你的全局异常捕获器抓到的时候,已经证实了你程序中存在BUG。一般而言,我们的全局异常捕获主要作用就是接收到异常之后进行异常的反馈。 一、简单粗暴:在Program.cs使用Try...Catch... 大家都知道,异常是通过Throw命令抛出,一路从抛出的模块里上抛,如果中途没有被try...catch.

Go语言调度器之创建main goroutine(13)

空扰寡人 提交于 2020-03-23 16:42:36
本文是《Go语言调度器源代码情景分析》系列的第13篇,也是第二章的第3小节。 上一节我们分析了调度器的初始化,这一节我们来看程序中的第一个goroutine是如何创建的。 创建main goroutine 接上一节,schedinit完成调度系统初始化后,返回到rt0_go函数中开始调用newproc() 创建一个新的goroutine用于执行mainPC所对应的runtime·main函数,看下面的代码: runtime/asm_amd64.s : 197 # create a new goroutine to start program MOVQ $runtime·mainPC(SB), AX# entry,mainPC是runtime.main # newproc的第二个参数入栈,也就是新的goroutine需要执行的函数 PUSHQ AX # AX = &funcval{runtime·main}, # newproc的第一个参数入栈,该参数表示runtime.main函数需要的参数大小,因为runtime.main没有参数,所以这里是0 PUSHQ $0 CALL runtime·newproc(SB) # 创建main goroutine POPQ AX POPQ AX # start this M CALL runtime·mstart(SB) # 主线程进入调度循环

go 函数类型

倾然丶 夕夏残阳落幕 提交于 2020-03-23 11:08:21
在go中,函数也可以被当成数据类型 e.g:下面有两个函数,+、-,然后定义了一个函数类型FuncType1,然后对funcType1附于不同的函数,则funcType1就可以执行相应的函数 package main import ( "fmt" _ "testinit" ) func main() { a:=10 b:=10 var funcType1 FuncType1 = Add1 fmt.Println(funcType1(a,b)) funcType1 = Minus1 fmt.Println(funcType1(a,b)) } func init() { fmt.Println("main init()") } func Add1(a,b int) int { return a+b } func Minus1(a,b int) int { return a-b } //定义函数类型 type FuncType1 func(int,int) int  这样就是对funcType1附了两次值,还可以进一步调整,如下 package main import ( "fmt" _ "testinit" ) func main() { a:=10 b:=10 /*var funcType1 FuncType1 = Add1 fmt.Println(funcType1(a,b))

了解C语言

此生再无相见时 提交于 2020-03-22 22:29:53
初学时的程序都需要打#include<stdio.h>及int main() //int main中int 声明函数类型为整形,main为主函数;‘//’为注释的意思,后面的内容不会运行; 用一个较简单的程序解释。 #include<stdio.h>//头文件,写就行了 int main()//主函数,学函数之前照着写就行了 {//花括号,表明函数的开始 printf("HELLO WORLD!");//printf为输出的意思,后面的形式为()加“”加语句,以封号结尾,否则没办法执行。 return 0;//将0作为主函数的返回值,如果不写的话输出也没错,但可能会造成数据的混乱。 }//表明函数的结束 来源: https://www.cnblogs.com/a1113775906/p/9873097.html

Java 线程与多线程

对着背影说爱祢 提交于 2020-03-22 17:46:55
Java是一门支持多线程的编程语言! 什么是进程? 计算机中内存、处理器、IO等资源操作都要为进程进行服务。 一个进程上可以创建多个线程,线程比进程更快的处理单元,而且所占用的资源也小,多线程的应用也是性能最高的。 Java的多线程实现:(三种方式)   在Java中实现多线程有两种途径:     1、继承Thread类     2、实现Runnable接口     3、实现Callable接口 继承Thread类: class MyThread extends Thread { //继承Thread 即 多线程类【线程操作主类】 } ps:在Java中,任何一个类继承了Thread类,都视为该类为多线程类。 在Java程序中都有一个“起点”即开始的地方;那么多线程类也有一个“起点”—— run()方法 ,也就是说在多线程的每个主体类中都必须要覆写Thread类中所提供的 run() 方法 public void run() ; run()方法没有提供参数和返回值,那么也就表示了线程一旦开始就要一直执行,不能够返回内容。 import sun.security.mscapi.KeyStore.MY; class MyThread extends Thread { //继承Thread 即 多线程类 private String name ; public MyThread

days-2

随声附和 提交于 2020-03-22 07:48:17
文件和异常 实际开发中常常会遇到对数据进行 持久化 操作的场景,而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词,可能需要先科普一下关于 文件系统 的知识,但是这里我们并不浪费笔墨介绍这个概念,请大家自行通过维基百科进行了解。 在Python中实现文件的读写操作其实非常简单,通过Python内置的 open 函数,我们可以指定文件名、操作模式、编码信息等来获得操作文件的对象,接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件(字符文件还是二进制文件)以及做什么样的操作(读、写还是追加),具体的如下表所示。 操作模式 具体含义 'r' 读取 (默认) 'w' 写入(会先截断之前的内容) 'x' 写入,如果文件已经存在会产生异常 'a' 追加,将内容写入到已有文件的末尾 'b' 二进制模式 't' 文本模式(默认) '+' 更新(既可以读又可以写) 下面这张图来自于 菜鸟教程 网站,它展示了如果根据应用程序的需要来设置操作模式。 读写文本文件 读取文本文件时,需要在使用 open 函数时指定好带路径的文件名(可以使用相对路径或绝对路径)并将文件模式设置为 'r' (如果不指定,默认值也是 'r' ),然后通过 encoding 参数指定编码(如果不指定,默认值是None,那么在读取文件时使用的是操作系统默认的编码)