954,135 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Comparing Python and C, Part 10, Structures

Intro

C is using structures to group data, mostly data that belongs together. Here we have some data that a campaign manager might keep for the volunteers. First we take a look at the C code:

#include <stdio.h>

struct person {
	char *name;
	char *sex;
	char *slogan;
	};

int main(void)
{
    struct person emma;
    struct person jack;
    struct person arnie;

    // load the structure ...
    emma.name = "Emma Porke";
    emma.sex  = "female";
    emma.slogan = "Vote for Bush and Dick";
    
    jack.name = "Jack Schidd";
    jack.sex  = "male";
    jack.slogan = "Never give a schidd!";
    
    arnie.name = "Arnold Negerschwarz";
    arnie.sex  = "often";
    arnie.slogan = "I know how to spell nukilar!";

    // show emma, jack and arnie slogans ...
    printf("%s says \"%s\"\n", emma.name, emma.slogan);
    printf("%s says \"%s\"\n", jack.name, jack.slogan);
    printf("%s says \"%s\"\n", arnie.name, arnie.slogan);

    getchar();  // console wait
    return 0;
}


No structure?

Well, Python does not have a structure, but then a class is used to group objects together. Let's look at a class that closely mimics the C structure:

# this Python class mimics a C structure
class Person(object):
    """__init__() functions as the class constructor"""
    def __init__(self, name=None, sex=None, slogan=None):
        self.name = name
        self.sex = sex
        self.slogan = slogan

# initialize and load the class (structure) like this ...
emma = Person("Emma Porke", "female", "Vote for Bush and Dick")
jack = Person("Jack Schidd", "male", "Never give a schidd!")
# ... or like this (looks more like the C example) ...
arnie = Person()
arnie.name = "Arnold Negerschwarz"
arnie.sex  = "often"
arnie.slogan = "I know how to spell nukilar!"

# show emma, jack and arnie slogans (similar to C) ...
print '%s says "%s"' % (emma.name, emma.slogan)
print '%s says "%s"' % (jack.name, jack.slogan)
print '%s says "%s"' % (arnie.name, arnie.slogan)

print

# ... show it the Pythonian way (good for large person lists) ...
personList = [emma, jack, arnie]
for pers in personList:
    print '%s says "%s"' % (getattr(pers, "name"), getattr(pers, "slogan"))

raw_input()  # console wait


Conclusion

Looks like the comparison is pretty close, with some added options of loading and displaying.
Like my uncle Ramon Vegaseat says "There's nothing left to learn the hard way!"

vegaseat
DaniWeb's Hypocrite
Moderator
5,976 posts since Oct 2004
Reputation Points: 1,345
Solved Threads: 1,416
 

You can simplify the Python 'for loop':

# ... show it the Pythonian way (good for large person lists) ...
personList = [emma, jack, arnie]
for pers in personList:
    print '%s says "%s"' % (pers.name, pers.slogan)
vegaseat
DaniWeb's Hypocrite
Moderator
5,976 posts since Oct 2004
Reputation Points: 1,345
Solved Threads: 1,416
 

This question has already been solved

Post: Markdown Syntax: Formatting Help
You