python函数的作用: 在Python代码段中如果有一段几十行的代码,需要多次重复使用这几十行代码时,为了提高代码的可用性,将代码段放进函数体内,以后在使用中直接调用该函数模块即可,函数是一个独立的函数体或是一段独立的功能体,最主要的作用是解决代码的重用性。同时函数也具备一定的灵活性。

包定义与使用

一、包定义:

含有__init__.py文件的目录我们称之为包

二、包使用:

目录内的文件我们称之为模块,我们利用包和模块的目的是找模块也就是Python文件内的内容,主要是哪些内容,一般都是功能体、代码段比较封闭,主要有两个,一个是类、一个是函数。

import package.module

package.module.myfunc()

三、包的定义和使用——示例

、首先创建一个目录,命名为pack。目录内包含_init_.py的就称之为包。

、在包内创建一个模块,命名为main.py。

、在模块main.py中我们定义一个函数,名称为myfunc();

、在主程序下的index.py下调用函数,其中as bm是为包下的main.py起的别名。

其包含关系为:包(pack)模块(main.py)函数(myfunc();)

函数的定义与使用

、myfunc函数定义与使用

def myfunc():
//函数体
print('hello world');
myfunc();
运行结果:
hello world
[Finished in 0.1s]

变量作用域

、全局变量

在一个函数体外的变量,我们称之为全局变量,可以在函数内直接使用。

a=10;
def myfunc():
print(a);
myfunc();

运行结果:

10

[Finished in 0.2s]

、局部变量

在一个函数体内的变量,我们称之为局部变量,不可以在函数外面直接使用。

def myfunc():
a=10;
myfunc();
print(a);

运行结果:

Traceback (most recent call last):
File "D:pythonindex.py", line 9, in
print(a);
NameError: name 'a' is not defined
[Finished in 0.1s with exit code 1]

函数参数

、普通参数

参数把外面真实的值传递给里面去使用,外面的称之为实参、里面的称之为形参

a=10;
def myfunc(i):
print(i);
myfunc(a);

注:a就是实参、i就是形参,将a的值传递给i,被i使用。

运行结果:

10
[Finished in 0.1s]

计算两数之和

普通参数示例

#已知2018年,求2018年是闰年还是平年?

#闰年的条件有两个:

#1、能被4整除,但不能被100整除。

#2、能被4整除,同时如果能被100整除的话,则必须同是能被400整除。

year=2000;
def getYear(y):
if (y%4==0) and (y%100!=0) or (y%400==0):
print('yes');
else:
print('no');
getYear(year);

注:通过函数传参,将year传递给y,然后在内部进行计算。

、默认参数

#默认参数

a=10;
b=20;
def sum(i=1,j=2):
print(i+j);
sum();

注:如果将a和b传给了i和j,则执行传递的值进行计算,如果没有传递值,则使用默认的1和2进行计算,这就是默认参数。默认参数一般在没有传递参数的时候使用。

另外,参数传值是按照顺序传值的。

x运行结果:

3

[Finished in 0.1s]

、序列参数

#序列参数

def sum(i):
print(i);
arr=[1,3,5,7,9]
sum(arr);

运行结果:

[1, 3, 5, 7, 9]
[Finished in 0.1s]
、任意参数
#任意参数
def sum(*vals):
tot=0;
for i in vals:
tot+=i;
print(tot);
sum(2,4,6,8,10);

运行结果:

30
[Finished in 0.1s]
、字典参数
#字典参数
def sum(**vals):
print(vals);
sum(name1='user1',name2='user2',name3='user3');

住:变量和值的关系,变量不能加单引号

x运行结果:

{'name1': 'user1', 'name2': 'user2', 'name3': 'user3'}
[Finished in 0.1s]
字典遍历:
#字典参数
def sum(**vals):
for i in vals:
print(i,vals[i]);
sum(name1='user1',name2='user2',name3='user3');

运行结果:

name1 user1
name2 user2
name3 user3
[Finished in 0.1s]
函数的返回值
、print();
#函数返回值
ef sum(i,j):
# print(i+j);
return(i+j);
print(sum(1,2));

注:return(i+j);只返回,不打印,谁调用就返回给谁,如果想打印,在sum前使用print即可。

运行结果:

3
[Finished in 0.1s]
、return()或return;

是直接打印好,还是直接返回好?

返回能体现出函数的特点,是一个独立的代码段或功能体,如果用print它不独立,为什么,如果我用sum(1,2)传进去得到的值就是3呢,但是结果3并不着急打印,后续还要处理。

函数如果没有返回值,返回的就是none。

def sum(i,j):
# print(i+j);
return(i+j);
a=10;
b=20;
str='{}+{}={}'.format(a,b,sum(a,b));
print(str);

运行结果:

10+20=30
[Finished in 0.1s]