简简单单介绍下python中函数的根基语法

其实现在网上supervisor的科目有众多,比较杂,我找了几个对自我吧是起帮衬的课,再做自己的明亮做片笔记,可以供应自己事后翻看。

python 函数

链接:https://www.cnblogs.com/Hai–D/p/5820718.html

定义

函数是靠将同组报告句的联谊通过一个名(函数誉为)封装起来,要想实行这函数,只需要调整用该函数叫做即可。

           http://blog.csdn.net/xyang81/article/details/51555473

特性

  1. 减少代码重复
  2. 如程序变得可扩大
  3. 设程序变得好维护

突发性在linux上的次第要要联合保管,这时候supervidor就十分好用,在windowns上操作就老大好。

函数的缔造

python中创造函数,需要采取__def__重要字,后面写函数的名,然后是亮参列表,大体如下:

def 函数名(形参列表):
    函数体......
    return 返回值

里头显示参列表和 return返回值并无是必须的。

首先:

函数的利用

想使调用函数程序,需要盖函数叫做加括号的样式进行调用,而括号内可以流传参数,而括号内之参数我们誉为__实参列表__,传入的实参会通过形参传递进函数,在函数内部就好运用了。如下:

def add(x,y):
    return x + y

# 调用函数
add(10,20)

待专注的是,python中的实参列表每一个参数之前用逗号分割,而于add()括号内之10,20这样的参数我们称为位置参数(positional
argument)。

那么需要注意的凡,在python中,函数的实参的个数必须跟形参的个数一样,实参个数多于形参或者少于形参都会报错。

一、安装supervisor

函数的参数

形参也可以叫做形参变量,只有当被调用时才分配内存单元,在调用了时,即自由所分配的内存单元。所以形参只能于函数内部生效。函数调用结束返回主调用函数后则不可知再使用该形参变量。

实参可以是常量、变量、表达式、函数等,无论实参是何种类型的计量,在展开函数调用时,它们还必发确定的值,以便把这些值传送给形参。因此应优先用赋值,输入等艺术要参数获得确定值

图片 1

1.wget
https://pypi.python.org/packages/80/37/964c0d53cbd328796b1aeb7abea4c0f7b0e8c7197ea9b0b9967b7d004def/supervisor-3.3.1.tar.gz

默认参数

先是,先来拘禁下的代码:

def stu_register(name,age,country,course):
    print('------注册学生信息--------')
    print('学员姓名:',name)
    print('学员年龄:',age)
    print('学员国籍:',country)
    print('学员选择课程:',course)

stu_register('小明',19,'中国','web前端')
stu_register('小红',20,'中国','linux')
stu_register('李白',25,'中国','python')

在方的实例中,每一个学生登记之国籍都是华夏,而当网上的局部网站遭遇,如果不失去手动设置,都默看中国,这便是经默认参数实现之。

如下,把country变成默认参数,

def stu_register(name,age,course,country='中国')

这就是说此时再次登记学员的下如果国籍是礼仪之邦即可免欲进行国籍的传参,而是用默认的参数。

2.tar zxf supervisor-3.3.1.tar.gz

要害参数

例行状态下,给函数传参数要按梯次,不思循顺序就好为此要参数,只待点名参数名即可,但切记一个求就是,关键参数必须放在位置参数后。

# 使用关键字参数
stu_register(name='小明',country='中国',age=19,course='linux')
'''关键字参数必须放在位置参数之后'''
stu_register('小红',country='中国',age=19,course='linux')

3.cd supervisor-3.3.1

非固定参数

使你的函数中并无是杀确定用户会传出多少个参数,那么就算可以利用非固定参数。

'''非固定参数'''
def test01(x,y,*args):
    print(x,y)
    print(args)

test01('李白','艳艳',12,3,4)

出口结果也:

李白 艳艳
(12, 3, 4)

欲留意的是,当使用了*args的时,会发觉传入的参数全部受在了一个元组中。那么只要想如果操作的言语才待遵循元组的操作方式操作即可。

非固定参数除了可以转移成元组以外,还可以用盛传的多寡易成字典,需要采取**kwargs,代码如下:

def stu_register(name,age,*args,**kwargs): # *kwargs 会把多传入的参数变成一个dict形式
    print(name,age,args,kwargs)

stu_register("Alex",22)
#输出
#Alex 22 () {}#后面这个{}就是kwargs,只是因为没传值,所以为空

stu_register("Jack",32,"CN","Python",sex="Male",province="ShanDong")
#输出
# Jack 32 ('CN', 'Python') {'province': 'ShanDong', 'sex': 'Male'}

4.python setup.py install       

部分变量和全局变量

于python中,函数外部声明的变量我们称为全局变量,在函数内部宣称的变量是一些变量。

全局变量可以于变量声明后的旁位置运用,而一些变量只能够以函数内部采用。

'''全局变量和局部变量'''
name = '李白' # 函数外部声明 ,称之为全局变量

def test():
    age = 20 # 函数内部声明,称之为局部变量
    print(age) # 局部变量只能够在函数内部使用
    print(name) # 全局变量可以在函数内部使用
test()
# print(age) 在函数外部没有办法使用局部变量

__tip:函数内部宣称全局变量__

假定想只要在函数内部宣称全局变量,需要利用global关键字

def test():
    global test
    test = '李白斗酒诗百篇'
test()
print(test) # 李白斗酒诗百篇

经global关键字就算能够当函数内部创立全局变量,但是这种写法是未推荐应用的,有或导致变量污染。

再有少数欲小心,看下的代码:

name = '艳艳'

def test():
    # 在函数中更改全局变量name的值
    name = 'hello,world'
    print(name) # hello,world
test()
print(name) # 艳艳

上述代码中,在函数中对全局变量进行了转移,并且打印更改后的变量,那么打印的结果是重复改的结果,但是于函数的外界再打印在函数中改的全局变量,发现结果连无于更改,因为于函数中改变全局变量,那么更改了后底值作用域仅停留在函数当中。

这就是说什么样以函数中针对全局变量更改而在函数外部调用结果吧转后的值吗?同样可以运用global关键字来实现。

name = '艳艳'

def test():
    global name
    # 在函数中更改全局变量name的值
    name = 'hello,world'
    print(name) # hello,world
test()
print(name) # hello,world

一经报错可能:

返回值

只要想赢得函数的尽结果,就可据此return语句子把结果返回

注意:

函数在实行进程中一旦碰到return语句,就会停实施并返回结果,so
也堪清楚吧 return 语句子代表正函数的完结
倘未当函数中指定return,那这个函数的返回值为None 。

  1. 提拔setuptools-0.6c11.tar尚未装

    下载https://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
    tar zxf setuptools-0.6c11.tar.gz
    cd setuptools-0.6c11/
    python setup.py build
    python setup.py  install
    
  2. 唤醒下充斥错误,需meld3>0.6.5

    1. 下载 http://dl.fedoraproject.org/pub/epel/7/x86\_64/p/python-meld3-0.6.10-1.el7.x86\_64.rpm(或者我[备份了一份](https://files.cnblogs.com/files/Hai–D/python-meld3-0.6.10-1.el7.x86_64.zip))
    2. 安装 rpm -ivh python-meld3-0.6.10-1.el7.x86_64.rpm

递归函数

当函数内部,可以调用其他函数。如果一个函数在其中调整用自己本身,这个函数就是递归函数。

'''创建一个递归,将传入的参数不断的除以2,到0为止'''
def calc(n):
    print(n)
    if int(n/2) > 0 :
        return calc( int(n/2) )

calc(10)

输出结果吧:

10
5
2
1

递归特性:

  1. 总得发一个尽人皆知的扫尾条件

  2. 每次上更深一层递归时,问题规模相比上次递归都许诺拥有削减

  3. 递归效率不高,递归层次过多见面导致栈溢出(在电脑被,函数调用是经过储藏室(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加相同重叠栈帧,每当函数返回,栈就会见减弱一重合栈帧。由于栈的深浅不是无与伦比的,所以,递归调用的次数过多,会招栈溢出)

堆放栈扫盲http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html

正如提示,安装完成:

Using /usr/lib64/python2.7/site-packages

Finished processing dependencies ``for supervisor==3.3.1

 

 

二、配置supervisor

1.创立文件夹和布局文件

mkdir /etc/supervisor

echo_supervisord_conf > /etc/supervisor/supervisord.conf

2.修改 /etc/supervisor/supervisord.conf 文件

先行新建 mkdir
/etc/supervisor/conf.d  以后程序的安排都于这个文件夹里面,以
.ini 结尾

图片 2

修改files的门径为上图所展示。这样安排后,会念取conf.d中之公文。

3.supervisorctl reload
如果配置文件生效

4.在conf.d中创建****.ini文件,创建了后supervisorctl update 使之生效

 ini文件中,可以依照以下配置,以下是本身有程序的布局,你要怎么安排好扣押即首文书:http://blog.csdn.net/xyang81/article/details/51555473
其实呢就是supervisord.conf配置中之解读,网上还有更详细的印证,问度娘。

[program:hsparser2]
command=python main_2.py
process_name=hsparser2-%(process_num)s
numprocs=10
directory=/home/hsparser2/
autostart=true
autorestart=unexpected
redirect_stderr=true

 保存退出即可。

5.安排来界面的supervisor来监督程序的周转状态

 图片 3

 保存退出即可,然后于您的windows上,输入而服务器的 ip:9001 就可以看到如下图:

图片 4

诸如此类你虽配置好你的次序在supervisor上了,大功告成。

 

老三、问题放在心上:

1.要是起以下问题

 图片 5

或是是由于supervisord进程停止了,建议重新运行

运作此命令:supervisord -c
/etc/supervisor/supervisord.conf