python连乘函数_python数据分析-函数定义

1、函数的意义

在编写代码时,经常会遇到重复进行代码编写的情况,通常是某一完整的动作或者行为,那么可以把这部分功能相似的代码封装起来,写成函数,这样可避免代码冗余,同时方便代码块的重复使用。

python中已经有很多内建的函数,比如print()、max()等,这里我们主要记录的是自己创建的函数,自定义函数。

2、定义一个函数

定义函数的规则如下:以def关键字开头,紧跟函数名称和()和冒号;

小括号()内传入参数,可传多个或者不传;

冒号后换行、缩进,开始函数体;

return用户返回函数结果,无return默认不返回。def funtion_name(parameters):

函数体

return()

函数的调用即执行函数操作,语法如下:[返回值] = 函数名([实参值])

栗子1: 定义一个筛选列表中所有偶数的函数

def even_list(list_param):

even = []

for i in list_param:

if i%2==0:

even.append(i)

return(even)

l1=[1,2,3,4,5,6,7,8,9]

even_l1 = even_list(l1)

栗子2:定义一个判断是否是素数的函数

num = int(input("请输入一个正数:"))

def prime_isnot(num):

if num < 2:

print('请传入大于2的自然数')

return

for i in range(2, num):

if (num % i == 0):

print("%d不为素数" % num)

break

else:

print("%d是素数" % num)

prime_isnot(num)

这里例子都是用了return来返回函数结果。

关键字return的作用:返回函数结果值;

终止一个函数的继续;

实参和形参:形参:定义函数时传递给函数的变量,并没有实际意义,也没有内存空间,如栗子1中的list_param

实参:调用函数时传递实际变量成为实参,实际变量是有内存的,比如栗子1中的l1列表

另外,定义函数时是可以传递多个参数的,多个参数可以按照位置、参数名称来进行传递。

栗子3

def square_sum(a, b):

return((a+b)**2, a**2 + b**2)

sum1 = square_sum(2,3)

sum2 = square_sum(a=2,b=3)

sum1 # (25 ,13)

sum2 # (25 ,13)

默认参数:

在定义函数式,直接给形式参数赋值,当调用函数时,如果默认参数没有传入,则采用默认值。

def printUserInfo(name, gender, age = 35 ):

print("name:",name)

print("gender:",gender)

print("age:",age)

printinfo(name='Lily',gemder='Male',age=45) # age=45

printinfo(name='Lilei',gemder='Famale') # age=35 采用默认值

3、函数与变量的作用域

全局变量/函数:作用域在于整个类空间内

a, b = 1, 2 # 全局变量

print(a,b)

def func1():

# 由于a,b是全局变量,函数内仍然可以访问到

print(a+b)

func1()

局部变量/函数:一般作用域局部函数内

a=1 # 全局变量

def func1():

c=3 # 局部变量,只在函数体内可以访问到

print(a+c)

func1()

print(c) # 访问不到

无论是全局或者局部变量/函数,都作用与与自己平行的或者向内的空间内

a=1 # 全局变量

def func1():

c=3 # 局部变量,只在函数体内可以访问到

print(a+c)

def func2(): # 该函数定义在函数内,与变量一样,在同级或者向下访问,func1外访问不到

d=1 # 局部变量,在func2外访问不到

print(c) # 可以访问,因为函数2在函数1之内,向下访问

func2() # 函数必须调用才可运行

func1()

就近访问原则

# 变量/函数 均是访问最内层的。

a=1

def func1():

a=2

print(a) # a=2

func1()

print(a) a=1

总结:变量/函数 均是同级或者向下访问,一般不可向上访问。

4、匿名函数

匿名函数:是指当函数实现比较简洁,且不会频繁调用,利用lambda来声明匿名函数,这种匿名函数是没有名字的,是临时使用。函数对象名 = lambda 形式参数:表达式

匿名函数单独使用的情况不是很常见,通常与一些高阶函数使用,比如apply、map、filter、reduce函数。

filter函数

filter函数过滤掉序列中不符合函数条件的元素,筛选元素。 语法:filter(function,sequence),function为匿名函数或自定义函数,返回函数条件为True的元素组成的迭代器。

lis = [1, 2, 3, 4, 5, 6, 7, 8]

re = filter(lambda x: x % 2 == 0, lis)

print(list(re)) # [2,4]

# 过滤字母以B开头的人名。

names = ['Alice','Bob','Smith','David','Barbana']

list(filter(lambda x: x.startswith('B'),names)) # ['Bob', 'Barbana']

map函数

map函数是将一个或多个序列作用与函数,并返回函数映射的值的迭代器。语法map(function,sequence),function中的参数值可传多个,后面的sequence与函数传入参数对应。

lis = [1, 2, 3]

result = map(lambda x: x*2, lis)

print(list(result)) # [2, 4, 6]

x = [1,2,3,4,5]

y = [2,3,4,5,6]

list(map(lambda x,y:(x*y)+2,x,y)) # [4, 8, 14, 22, 32]

reduce函数

reduce函数是对序列进行压缩运算,语法reduce(function,iterable),function须传入两个参数,最后返回函数结果。reduce在functools模块之中,需导入使用。

from functools import reduce

arr = [2,3,4,5,6]

reduce(lambda x,y: x + y, arr) # 直接返回一个值 20(连加)

product = reduce((lambda x, y: x * y), [1, 2, 3, 4])

product # 24(连乘)

其实,这里所讲述map和filter都是python内建函数,且实现功能可以使用列表推导式代替。

apply函数

apply函数是pandas中的函数,应用对象为pandas中的DataFrame或者Series。语法apply(function,axis),axis表明对行或者列做运算。应用方式:直接应用在DataFrame或者Series对象上;

应用在pandas中的groupby之后的聚合对象

import pandas as pd

import numpy as np

a = np.random.randint(low=1,high=5,size=(2,4)) # 2行4列

data = pd.DataFrame(a, columns=list('abcd'))

data

data.apply(lambda x:x*10)

data['a'].apply(lambda x:x*10)

# data['a'].map(lambda x:x*10)也可以,pandas模块也有map函数

小结:filter和map都是内置函数,reduce在functools模块,apply在pandas模块(pandas模块也有map函数)

过滤删减序列用filter;要对多个序列做函数运算用map;在pandas里面用apply。

这里主要是介绍lambda函数的应用,对于apply和map对DateFrame的操作后续将详细进行学习记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值