[转载]第二课 入门_huadingjin_新浪博客

原文地址:第二课 入门 作者:Jason_Lee

看到这里你应该明白一点,这是一篇Python for Maya的教程,如果你想系统地学习Python 那么你可能要参考些更全面的书籍。

                           以下文章来自:胡泳滨BLOG

如果你是PYTHON高手,可以跳过这篇:)因为节下来我要讲述PYTHON的基本应用。由于我的PYTHON教程主要是针对MAYA的应用,所以PYTHON基本应用的介绍主要会涵盖MAYA环境中经常会使用到的PYTHON功能。学习过程中,尽量运用已学到的知识自己也试着编写一些代码,发挥主观能动性。这样学习,效果会十分显著。该篇主要含盖以下内容:

 

2.1 脚本编辑器(Script Editor)

2.2 PYTHON常用数据类型和操作符

2.3 流程语句

2.4 定义函数

2.5 常用模块


 

2.1 脚本编辑器(Script Editor)

MAYA界面中有2处地方可以编辑PYTHON脚本,一处是左下角的快速命令行,这个命令行可以在PYTHON和MEL间快速切换,如下图:

一处是右下角的Script Editor按钮,点开窗口如下:

我们的PYTHON代码就是写在PYTHON选项卡中,如果PYTHON脚本在MEL选项卡中执行将会出错,vice versa。

我们在MAYA中执行的操作会通过MEL语言打印在上面灰色区域,也就是输出区域。这些MEL语言都可以非常快地转化成PYTHON代码。这个数据输出区域同时也会打印PYTOHN脚本的执行结果以及出错信息。

现在我们来执行一条简单的PYTHON语句,来一个初体验:PYTHON页面中输入print "hello maya",然后按数字键盘上的小回车(注意:小回车是执行代码,大回车是换行)。我们看到输出区域的打印结果如下:

 

print "hello! My name is Hu Yongbin" # 我的名字是胡泳滨

hello! My name is Hu Yongbin

 

第一行是告诉用户,你执行了print "hello! My name is Hu Yongbin"这条命令,第二行hello! My name is Hu Yongbin是执行这条命令的结果,这里的执行结果就是:hello! My name is Hu Yongbin被打印出来了。命令执行成功。但是我们发觉PYTHON页面里的代码也消失了。如果需要反复执行代码,可以选中需要执行的代码,然后按小回车,这样,我们可以在执行代码的同时保留页面里的代码。(建议使用第二种方法执行代码)

 

接下来,再举个简单的例子来说明输出窗口中的报错信息。随意在命令行中输入一些字母HuYongbin,然后执行,出现如下信息:

 

HuYongbin

# Error: NameEror: name 'HuYongbin' is not defined #

 

这是个简单的报错信息,说明abcd没有被定义,电脑无法识辨。这条命令是无效的。

最后就是#符号,#后的所有的代码(换行前)都被看作注释,不参与运算。例如:

 

# print "HuYongbin" : )

 

虽然也是print命令,但是前面有#,所以无视。

现在我们终于知道如何在PYTHON中执行代码,以及辨别代码是否有效。在下面的教程中,我将会用一些简单的实例来展示PYTHON的常用功能!

 

2.2 PYTHON常用数据类型和操作符

数据类型就是数据的类型- -U,就是不同类型的数据,数据类型包括:整型,浮点,字符,列表,元组,字典。

整型(INT)就是整数,比如:1,2,3,21,1000……

浮点(FLOAT)就是带小数点的数字,比如:1.12,4.5……

字符(STRING)就是文字,需要用单或双引号,比如:"Hu Yongbin",'hello',"12","3.1415","#_%)"

列表(LIST)就是一系列数据的组合,用中括号,比如:[1,2,3],["HuYongbin","jerry"],["marry",14]

元组(TUPLE)用小括号,和列表的区别是他是不可变的:(1,2,3),("HuYongbin","jerry"),("marry",14)

 

操作符,形象的说就是用来操作数据的工具,包括数学操作符,比较操作符,逻辑操作符。

数学操作符:+(加) -(减) *(乘) /(除)%(取除法余数)**(乘方)

比较操作符:<(小于)<=(小于等于)>(大于)>=(大于等于)==(等于)!=(不等于)

逻辑操作符:and or not

 

下面来做一些热身,在实际运用中体会不同数据类型之间的配合!

 

2.2.1 整数

a=1 # 定义变量a, 把整数1赋予给a

b=3 # 定义变量b, 把整数3赋予给b

a+b

 

运行结果为3,其他整数小数的加减乘除这里就不熬述了~

2.2.2 字符

name1="HuYongbin" # 定义变量name1,把字符HuYongbin赋予给name1,注意双引号

name2='jerry' # 定义变量name2,把字符jerry赋予给name2,注意这里是单引号,都可以表示

name1+name2

 

运行结果为"HuYongbinjerry",这里说明字符之间可以相加。但是不同数据类型之间不可以相加,变量a和变量name1就不可以相加,因为一个是整数,一个是字符。字符单引号和双引号的不同用法我会再之后的实例中写出。

2.2.3 列表

list1=[1,2,3] # 定义列表list1,包含3个整型数字

list2=["HuYongbin","sphere","plane"] #定义列表list2,包含3个字符

list=list1+list2 # 把list1和list2的相加结果赋予新的变量list

print list

 

运行结果为[1,2,3,"HuYongbin","sphere","plane"],可见,包含不同数据类型的列表之间可以相加

我们可以对列表中的数据进行访问操作。执行以下命令:

 

list[0]+list[2]

 

运行结果为4,因为list[0]指的是list列表中的第一项,list[2]指的是list列表中的第3项。(注意,PYTHON数数是用0开始的),依次类推,list[4]指的就是“sphere”。

 

list[3]*list[1]

 

运行结果为"HuYongbinHuYongbin",其效果等同于"HuYongbin"*2,可见,字符和整数间,可以做乘法运算。同样,如果"c"*5的运算结果就是"ccccc"。

 

user1=["HuYongbin","cat"]

user2=["jerry","mouse"]

userInfo=[user1,user2] # 定义列表userInfo,该列表内又嵌套了2个列表

print userInfo # 打印userInfo

 

运行结果为[ ["HuYongbin","cat"],["jerry","mouse"] ],我们看到大列表中包含了2个小列表

我们同样可以访问嵌套列表:

userInfo[0]表示userInfo中的第一个列表user1,userInfo[0][1]表示user1中的第2个值"cat"。同样,如果要访问"jerry",你可以通过userInfo[1][0]来访问。

我们还可以对列表里的内容进行添加或移除:

 

userInfo.append(["jack","male"])

 

这样我们再次打印userInfo的时候,得到的结果应该为[ ["HuYongbin","cat"],["jerry","mouse"],["jack","male"] ]

 

userInfo.remove(["HuYongbin","cat"])

 

这样我们再次打印userInfo的时候,得到的结果应该为[ ["jerry","mouse"],["jack","male"] ]

列表和字符还可以访问其区间的数据:

 

a=[1,2,3,4,5,6,7,8] # 定义列表a

b="HuYongbin" # 定义字符b

a[3:5] # 返回的值是[4,5,6],是列表a的第4位到第6位

b[1:4] # 返回的值是"uYon"

a[3:] # 返回的值[4,5,6,7,8],从第4位一直到结尾

b[:-4] # 返回的值是"HuYon",从第1位到倒数第4位

2.2.4 常用工具

接下来,我给大家介绍一些不同数据类型中的常用工具!

 

2.2.4.1 +=操作符号

a=1

a+=1 # 等同于a=a+1

 

运行结果为2,因为a=1,a+1等于2,然后把2这个数字赋予给原来的a,这样,2就替换掉原来的1了,a就等于2

 

2.2.4.2 pow()乘方命令

 

x=pow(4,3) # 就是4的3次方

y=pow(4,-2) # 也就开根号

 

2.2.4.3 len()获取长度命令

len()命令能够返回字符和列表的长度,如下:

 

len("HuYongbin") # 返回结果是9

len([1,2,6]) # 返回结果是3

len([[1,2,7],["lock","jack"],["bach","davinci","HuYongbin"]]) # 返回结果为3,因为里面包含3个列表

 

2.2.4.4 int()str()数据类型转换命令

int()的str()是字符和整数转换的命令,非常实用:

 

a=256

b=int("256") # 把字符"256"转换成整数256

a-b # 运行结果为0

c="maya"

d=str(2011) # 把整数2011转换成字符"2011"

c+d # 运行结果是"maya2011"

 

2.2.4.5 max()min()最大值最小值命令

max()和min()可以用来比较数字的大小:

 

max(1,7) # 结果为7,两个取大的值

min(3,6) # 结果为3,两个取小的值

 

2.3 流程语句

 

2.3.1 if语句

if就是如果的意思,是条件判断语句的关键词,一般可以和elif或else语句结合使用。接下来我会用一些简单实用的例子来说明if语句的用法:

 

age=17 # 定义age等于17

if age<18: # 假设第一种情况,注意要用冒号

print "you are not adult" # 注意代码缩进

else: # 假设第二种情况,注意冒号

print "you are adult"

 

这里的运行结果是"you are nod adult",因为假设第一种情况是成立的。这里提一提代码缩进,缩进就相当于写作文时每小节开头要空2字;代码缩进,就是指被缩进的代码是上一行代码的子代码。

 

name="Hu Yongbin" # 定义name变量

if name=="Hu Yongbin": # 注意这里是“==”,不是“=”

print "Hello, Hu Yongbin"

 

运行结果是打印"Hello, Hu Yongbin"。“==”和“=”的区别是:“=”相当于是个动词,把"Hu Yongbin"这个字符值传递给变量name;“==”表示一种状态。if name=="tom"这句话翻译成人类的语言就是:假设name的值等于"Hu Yongbin"这个状态是成立的。(一旦成立就执行后面的语句……)

 

a=3

if a<1: # 假设1

print "a<1"

elif a==1: # 这里出现了假设2

print "a=1"

else: # 如果两种假设都不成立的话……就执行下面的语句

print "a>1"

 

运行结果是"a>1"。很显然,a不小于1,也不等于1,那就只有执行else后面的语句了。

 

2.3.2

for语句的操作对象一般是一个序列,对序列中的每一个成员进行操作,举例:

 

seq=[1,2,3] # 定义一个列表

for i in seq: # for即将对列表seq中的每个成员进行操作,成员我们用i来代替(这里成员变量可以自定义)

print i+1 # 操作的内容:给每个成员+1

 

执行结果如下:

2

3

4

 

我们给每个成员都+1了

说到for循环语句,我们不得不提一下range()内置函数。range()可以针对数字提供一个序列范围:

 

range(10)

 

运行结果就是:[0,1,2,3,4,5,6,7,8,9]

 

range(5,10)

 

运行结果就是:[5,6,7,8,9]

 

range(0,10,2)

 

运行结果就是:[0,2,4,6,8]

结合for语句,我们可以尝试执行以下代码:

 

x=["a","b","c","d","e","f","g","h"]

for i in range(0,10,2): # 操作范围:[0,2,4,6,8]

print x[i] # i 将会被[0,2,4,6,8]中的每一项依次替代,替代后再执行print语句。

 

运行结果:

a

c

e

g

 

2.4 定义函数

在PYTHON中,我们可以自己定义一个函数,定义函数的命令是def,如下:

 

def MyFirstFunction():

print "this is my first function"

 

这里我们用def命令定义了一个函数名字叫MyFirstFunction,后面括号里面是用来填写参数的,如果没参数,就留空。定义函数内的代码需要缩进。如果要执行函数,操作如下:

 

MyFirstFunction() # 这样输入,就可以执行函数,函数内的所有命令都会被执行

 

执行后,结果会打印"this is my first function",说明定义函数内的代码被正确执行了。

函数还有一种定义方式,就是在括号里加上一些参数:

 

def MySecondFunc(a, b): # 该函数包含了a和b两个参数

print a+b

 

然后我们来执行这个函数:

 

MySecondFunc(2, 5) # 把2和5分别代入a和b,然后执行,函数内的print命令会被执行。

 

运行结果为7

 

MySecondFunc("first","second")

 

运行结果为"firstsecond",两个字符串被相加了。

函数还可以签套函数,如下:

 

def func1():

a=1

print a

 

def func2():

b=2

print b

func1()

 

定义好func1和func2后,执行func2(),结果为:

2

1

因为func2先执行打印b,在执行func1,func1会打印a

 

2.5 常用模块

简单说,模块就是一个打包的命令集合,以文件的形式存在。模块的使用方法是“导入”。我们直接针对MAYA PYTHON的模块来具个简单的例子吧。

 

2.5.1 maya模块

import maya.cmds # 导入maya模块中的cmds命令集

 

这样,我们就在MAYA中导入了cmds命令集,里面包含了所有可以在PYTHON环境中使用的MAYA命令。现在我们来初试这个cmds命令集

 

import maya.cmds # 导入模块

maya.cmds.polyCube() # 调用模块中的polyCube()命令。

 

发觉场景里生成了一个方块,命令执行成功。

但是这样打命令太长了,我们在导入maya.cmds时加上:

 

import maya.cmds as mc

 

这样maya.cmds就作为mc导入了,我们就不用再打长长的maya.cmds了。我们再创建一个Cube:

 

mc.polyCube()

 

短很多了吧。接下来介绍几个常用的模块:

 

import maya.mel # 导入这个,可以调用所有的mel命令

 

2.5.2 os模块

import os 

 

os模块也是用的比较多的。我经常会使用os.system(),括号中间可以写一些DOS命令:

 

os.system("md c:\MyFolder") 

 

这样就可以用PYTHON来调用DOS命令了。

 

os.listdir("C:\")

 

listdir可以以列表的形式列出路径中的所有的文件和文件夹(注意:是列表的形式,像这样:['a.py', 'AUTOEXEC.BAT', 'boot.ini'])。

接下来再介绍一个re模块,我经常用它来做字符的切割工具:

 

2.5.3 re模块

import re

a="Hello_World"

re.split("_",a) # split就是切割工具,有2个参数 ,"_"就是切割的根据,a是我们定义的变量

 

返回结果是一个列表,["Hello","World"],还有个是替换命令re.sub():

 

a="my4name4is4HuYongbin"

re.sub("4","_",a) # 就是说把4替换成"_"

 

输出结果:"my_name_is_HuYongbin"

 

2.5.4 time模块

import time # 时间模块

time.ctime()

 

执行结果:# Result : Fri Jun 11 22:52:16 2010 # 。也就是当前的时间。

 

OK,PYTHON简易教程就写到这里,简易教程的内容肯定不是很完整,这里只是罗列出一些实战中比较常用的功能。(也是我比较常用的)初学者可以抛弃理论,先玩起来再说。实践太重要了。在下一篇中,我们将正式进入MAYA PYTHON实际应用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值